Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns DDD:聚合根可以是另一个聚合根中的实体吗?_Design Patterns_Entity_Domain Driven Design_Modeling_Aggregateroot - Fatal编程技术网

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实体可以引用其他实体,只要它们在同一聚合中。