我试图模拟公司有很多团队的问题。有一个业务规则&#34;团队名称必须是每个公司唯一的<#34; 。但是,Team
还有许多其他行为,例如加入。此外,Team
可以包含多个Report
个 - 这样可以保留对Team.Id
的引用。
目前,Team
和Company
是单独的聚合根。为了强制执行Team.Name
每Company
必须唯一的不变量,我是否可以在Company
聚合中创建一个团队实体,它只负责创建和重命名Team
?我相信Company
必须创建Team
才能执行规则,并负责重命名,但这就是全部。
我的问题是:这是正常的吗?将聚合边界上的域概念拆分为强制不变量的常规方法吗?
我能看到的唯一选择是将整个Team
聚合移动到Company
聚合中。但在这种情况下,我会在Report
内存储对非聚合的引用。
我想象这是一个常见的建模问题,但谷歌让我失望了!
非常感谢任何帮助!
答案 0 :(得分:3)
Team.Name每个公司必须是唯一的
为什么?这真的是一个域不变或更多的技术规则,这样你就不会在团队管理UI上混淆2个团队吗?
如果是后者,您应该让Application服务处理该规则,方法是询问TeamRepository
并在唯一性被破坏时返回异常。
合并Company
和Team
聚合可能是一种选择,但对我来说这似乎是一个非常小的域规则导致这种转换。如果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