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

aca*_*rns 5 modeling entity design-patterns domain-driven-design aggregateroot

我正在尝试模拟一个问题,其中Company有很多Teams。有一个商业规则,“每个公司的团队名称必须是唯一的”。但是, aTeam有许多其他行为,例如加入。此外, aTeam可以有许多Reports - 维护对Team.Id.

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

我的问题是:这正常吗?跨聚合边界拆分域概念是强制执行不变量的正常方法吗?

我能看到的唯一选择是将整个Team聚合移动到Company聚合中。但在这种情况下,我将在Report.

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

任何帮助深表感谢!

gui*_*e31 4

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

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

如果是后者,您可能应该让应用程序服务TeamRepository通过在唯一性被破坏时询问并返回异常来处理该规则。

合并CompanyTeam聚合可能是一种选择,但对我来说,导致这种转变的似乎是一个非常小的域规则。如果两个聚合已经很大并且可能导致争用和并发问题,则更是如此。通过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