Design patterns DDD:聚合根可以是另一个聚合根中的实体吗?
我试图模拟一个公司有许多团队的问题。有一条业务规则是“每个公司的团队名称必须是唯一的”。然而,Design patterns DDD:聚合根可以是另一个聚合根中的实体吗?,design-patterns,entity,domain-driven-design,modeling,aggregateroot,Design Patterns,Entity,Domain Driven Design,Modeling,Aggregateroot,我试图模拟一个公司有许多团队的问题。有一条业务规则是“每个公司的团队名称必须是唯一的”。然而,团队还有许多其他行为,例如加入。另外,一个团队可以有许多报告s,它们维护对团队.Id的引用 目前,团队和公司是独立的聚合根。为了强制执行不变量,即每个公司的团队名称必须是唯一的,我是否可以在公司聚合中创建一个团队实体,该实体只负责创建和重命名团队?我相信公司必须创建团队,以执行规则,并负责重命名,但仅此而已 我的问题是:这正常吗?跨聚合边界拆分域概念是强制执行不变量的常规方法吗 我能看到的唯一替代方案是
团队
还有许多其他行为,例如加入。另外,一个团队
可以有许多报告
s,它们维护对团队.Id的引用
目前,团队
和公司
是独立的聚合根。为了强制执行不变量,即每个公司的团队名称必须是唯一的,我是否可以在公司聚合中创建一个团队实体,该实体只负责创建和重命名团队
?我相信公司
必须创建团队
,以执行规则,并负责重命名,但仅此而已
我的问题是:这正常吗?跨聚合边界拆分域概念是强制执行不变量的常规方法吗
我能看到的唯一替代方案是将整个团队
聚合移动到公司
聚合中。但在本例中,我将在报告中存储对非聚合的引用
我想这是一个常见的建模问题,但谷歌让我失望了
非常感谢您的帮助
团队。每个公司的名称必须唯一
为什么??这真的是一个领域不变的规则还是一个技术规则,这样你就不会在团队管理UI上混淆两个团队
如果是后者,您可能应该让应用程序服务处理该规则,方法是询问TeamRepository
,并在唯一性被破坏时返回异常
合并公司
和团队
聚合可能是一种选择,但对我来说,导致这种转变似乎是一个非常小的领域规则。如果这两个聚合已经很大,并且可能导致争用和并发问题,则情况更是如此。使用Report
(可能是AR?)引用Team
,您已经可以看到Team
可能是应用程序中的一个中心点。把它封装在别的东西里似乎很奇怪
团队真的是聚合根吗?也就是说,没有母公司,团队能否生存?不!我真的很高兴将团队转移到公司内部,但这意味着报表正在存储对非聚合的引用。@acairns实体可以引用其他实体,只要它们在同一聚合中。