DDD:聚合根是否可以成为另一个聚合根中的实体?

时间:2015-03-18 08:19:50

标签: design-patterns entity domain-driven-design modeling aggregateroot

我试图模拟公司有很多团队的问题。有一个业务规则&#34;团队名称必须是每个公司唯一的<#34; 。但是,Team还有许多其他行为,例如加入。此外,Team可以包含多个Report个 - 这样可以保留对Team.Id的引用。

目前,TeamCompany是单独的聚合根。为了强制执行Team.NameCompany必须唯一的不变量,我是否可以在Company聚合中创建一个团队实体,它只负责创建和重命名Team?我相信Company必须创建Team才能执行规则,并负责重命名,但这就是全部。

我的问题是:这是正常的吗?将聚合边界上的域概念拆分为强制不变量的常规方法吗?

我能看到的唯一选择是将整个Team聚合移动到Company聚合中。但在这种情况下,我会在Report内存储对非聚合的引用。

我想象这是一个常见的建模问题,但谷歌让我失望了!

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:3)

  

Team.Name每个公司必须是唯一的

为什么?这真的是一个域不变或更多的技术规则,这样你就不会在团队管理UI上混淆2个团队吗?

如果是后者,您应该让Application服务处理该规则,方法是询问TeamRepository并在唯一性被破坏时返回异常。

合并CompanyTeam聚合可能是一种选择,但对我来说这似乎是一个非常小的域规则导致这种转换。如果2个聚合已经很大并且可能导致争用和并发问题放在一起,那就更是如此了。使用Report(可能是AR?)引用Team,您已经可以看到Team可能是您应用中的中心点。将它封装在其他东西中似乎很奇怪。

http://gojko.net/2010/06/11/udi-dahan-the-biggest-mistakes-teams-make-when-applying-ddd/

http://thinkbeforecoding.com/post/2009/10/28/Uniqueness-validation-in-CQRS-Architecture