Domain driven design DDD:所有聚合根都需要子级吗?

Domain driven design DDD:所有聚合根都需要子级吗?,domain-driven-design,aggregateroot,Domain Driven Design,Aggregateroot,到目前为止,我在DDD上读到的所有内容都暗示,只有封装其他实体的实体才是根聚合 在以下情况下如何: WorkOrder - idManufacturer - WONumber - Description Manufacturer - idSelf - Name WorkOrror引用制造商,但不会是Word订单的子实体,因为其他实体可能引用工作顺序,在这种情况下,我将考虑两个根实体,但制造商不是集合……/P> 这是对的吗?有一次,我对DDD产生了极大的兴趣,有人告诉我,没有子实体

到目前为止,我在DDD上读到的所有内容都暗示,只有封装其他实体的实体才是根聚合

在以下情况下如何:

WorkOrder
 - idManufacturer
 - WONumber
 - Description

Manufacturer
 - idSelf
 - Name

WorkOrror引用制造商,但不会是Word订单的子实体,因为其他实体可能引用工作顺序,在这种情况下,我将考虑两个根实体,但制造商不是集合……/P>


这是对的吗?

有一次,我对DDD产生了极大的兴趣,有人告诉我,没有子实体的实体可以看作是聚合根

特别是当有人说“只坚持你的总根”


在您的示例中,聚合根是
WorkOrder
Manufacturer
。您将拥有一个用于
WorkOrder
的存储库,以及一个用于
制造商的存储库。事实上,您将主要拥有仅包含值对象的聚合。带有儿童实体的ARs是罕见的。阅读红皮书(实现DDD Vaughn Vernon),这里描述了小聚合规则。

聚合根的任务是封装和强制执行不变量。它可能由其他对象组成,但它们都是通过AR进行交互的。关于聚合,需要记住的重要一点是,它应该独立于您选择的持久化机制。大多数聚合应该根本没有依赖关系

我可能弄错了,但看起来IDM制造商是外键。这表明(并非总是如此)它不是封装的。我花了一段时间才弄明白,聚合中的字段是私有的。这就提出了一个问题:如何保存它的状态以及如何将数据放到UI上。有很多方法可以做到这一点。我的首选方法是使用事件源和CQR。然后,我可以根据聚合生成的事件构建UI。我还可以持久化这些事件,并使用它们重建聚合

我在我的博客上深入了很多,你可能想看看。您还可以找到一篇关于在使用CQR和事件来源时构建主详细信息屏幕的帖子,该帖子非常有用


我希望这会有所帮助。

什么是您的受限上下文,用户能否直接与制造商进行交互?也许会帮助您更好地了解如何识别聚合和聚合根(AR)。顺便说一句,AR与儿童的概念无关