DDD建模,聚合根之间的相互作用

时间:2010-08-20 16:35:39

标签: domain-driven-design modeling aggregateroot

alt text 用1; 2; 3标记我的聚合根。看起来很不错 - 几乎像葡萄。

alt text

我不喜欢的是一个用红色箭头标记的实体。

让我们想象一下:

  • AR#1是公司
  • AR#2是办公室
  • AR#3是员工
  • 标有红色箭头的实体名为Country
    • 公司制定雇用员工的国家/地区的规则(在招聘时,company.Countries.Contains(employee.Country)必须为真)

我在某种程度上看到了域名中这个非常不重​​要的部分(可能听起来不像这个例子中的那个),我想避免促使国家聚合根。

关于聚合根的

Glossary说:

  

可以传递对内部成员的瞬时引用,仅在单个操作中使用。

那么 - 是否会引入类似'EmployeeCountry'的内容,删除对公司Country的引用,并检查Employee国家/地区是否与招聘操作中的任何公司国家匹配听起来合理?

还有其他想法吗?

我怎样才能让我的葡萄看起来像他们应该的那样?

1 个答案:

答案 0 :(得分:7)

在这种情况下,Country只是一个价值对象,而不是一个实体 - 更不用说是一个聚合根 - 所以没有理由改变你的设计(没有更多信息)。

此外,请注意,您引用的警告与聚合根的内部成员有关,而不是自行聚合。在多个位置维护对聚合的引用没有任何问题。聚合根应该封装子对象,以便有一个地方可以强制执行相关对象的业务规则。

你可以在埃文斯的“领域驱动设计”(a.k.a。,“The Blue Book”)中的几个地方清楚地看到这一点。例如,请参见第127页的图(在聚合根的介绍中),该图显示了一个Car聚合,它引用了Engine聚合。