我可以使用一些帮助理解我的域模型,并确保我正确地接近设计。定义边界和聚合根之间的通信
我有一个称为部门的聚合根。 Department对象具有多个子值类型,可帮助定义“部门”的业务概念。在我的用户界面中,用户可以列出,创建,编辑和删除部门对象。
我有另一个称为项目的聚合根。一个项目有几个孩子价值类型,但也与部门有关系,因为每个项目都是由一个部门“拥有”的。项目可以创建,编辑,删除等,这样做对部门没有影响,而删除部门也会删除它拥有的任何项目。
我的用户界面将根据当前用户有权访问的部门显示项目列表。他们可能可以访问多个部门。当同时显示为列表项目和详细信息时,我需要在项目中显示部门徽标。
我的第一个想法是该项目是一个具有简单DepartmentID属性的聚合根,可用于'查找'部门。但现在我开始认为我真的只有一个聚合根:部门。
您认为如何?
UPDATE
我不知道这是否是关键讨论或改变什么,但下面的思想读第一对夫妇的答案后,发生在我身上。
处似乎有两个背景:
- 作为该 支持修改一个独立的实体。
- 作为 案件中包含只读数据和 项目的子项目没有任何行为。
这让我觉得我应该在我的模型中有两个'对象',案例#1的聚合根和案例#2的值类型。我在正确的轨道上吗?
只有部门的接口/ API是CRUD。有很多与项目相关的操作和行为,这就是为什么我最初将其视为一个聚合。 – SonOfPirate 2011-05-20 11:19:19
即使一个项目如果没有所有权而不能“存在”,这难道不是一个有效的规则吗?我的意思是,如果Project不是一个聚合根,那么当我的许多用例开始浏览项目列表,选择一个项目并执行任务时,我必须实例化部门以导航到项目针对该项目,例如编辑它的属性。我真的需要通过Department来做到这一点吗?在这种情况下,Department只是一个价值型装饰项目吗?这是我混乱的根源。 – SonOfPirate 2011-05-20 11:21:46
如果您将它们建模为单独的AR,然后删除部门,如果您还想删除项目,则必须使用跨AR的工作单元,这是不推荐的,在某些情况下甚至可能不可能(分区,事件采购)。我会更新答案以提供有关更新部分的信息。 – 2011-05-20 13:20:10