【发布时间】:2015-04-15 12:19:20
【问题描述】:
我们已将数据库中的 Location 实体标识为我们域 (DDD) 中的值对象。位置被其他域对象使用,但并不真正“独立”——它们总是属于另一个实体。
现在我们尝试在一个简单的 MVC Web 应用程序中编辑这些值的列表。因此视图将在视图模型LocationViewModel 中显示位置列表。
但是,根据定义,值对象是不可变,但确实包含对另一个实体的引用 (Business)。
域:
public class Location : ValueObject<Location>
{
readonly locationId;
public int LocationId {get{return _locationId;}}
public Business Business {get;set;}
}
我的问题是了解如何在 UI 中简单地编辑一堆值对象并进行更改,例如该位置属于什么业务。 值对象不应该具有“身份”,但它确实需要一个 ID,以便存储库可以更新数据库。
我也不认为你可以仅仅因为你想在 UI 中编辑它就将 Location 设为一个实体。还是Location,在这种情况下确实是一个实体?
我不明白什么?
谢谢!
【问题讨论】:
-
您域中的位置是什么?它是如何使用的?它是如何共享的?如果共享位置值发生更改,是否应将更改反映在绑定到同一位置的实体中?
-
位置是您存储和放置物品的地方,例如架子或展示柜。您可以将项目分配到位置。因此,如果将项目分配给某个位置,则您无法删除该位置。位置还与企业和实际地址相关联。我不相信一个位置是“共享的”,它有自己的一组与其他表相关的表,例如业务,项目。
-
如果您一直试图关注持久性问题,您将永远无法理解 DDD。忘记数据库表或任何其他持久性细节。想想
Location是如何被您域中的其他对象使用的。是什么让您认为 Location 是一个值对象?
标签: asp.net-mvc c#-4.0 domain-driven-design value-objects