Domain driven design DDD中嵌套聚合的处理

Domain driven design DDD中嵌套聚合的处理,domain-driven-design,aggregateroot,Domain Driven Design,Aggregateroot,我刚刚开始使用DDD,在理解如何适应数据的关系性质时遇到了一些困难。我有我相信会被认为是我的聚合根,但聚合也有它自己的聚合。我不想违反德米特定律,我想知道我是否认为这是错误的,我希望DDD专家能提供一些见解 我的聚合根是我的Account对象,它有许多AccountElement实体的聚合,这些实体本身就是单个ProductComponent实体的逻辑分组 一个AccountElement在Account上下文之外的AccountElement没有任何意义,因此我很满意我的结论,即Account

我刚刚开始使用DDD,在理解如何适应数据的关系性质时遇到了一些困难。我有我相信会被认为是我的聚合根,但聚合也有它自己的聚合。我不想违反德米特定律,我想知道我是否认为这是错误的,我希望DDD专家能提供一些见解

我的聚合根是我的
Account
对象,它有许多
AccountElement
实体的聚合,这些实体本身就是单个
ProductComponent
实体的逻辑分组

一个
AccountElement
Account
上下文之外的
AccountElement
没有任何意义,因此我很满意我的结论,即
Account
对象是我的聚合根,并且我预期该实体具有聚合
Elements
属性。让我困惑的是
ProductComponent
集合。此聚合在
帐户元素
之外没有意义,在
帐户
之外也没有意义

我不认为我应该通过点访问单个
ProductComponent
对象,例如:

var reference = account.Elements(0).ProductComponents(0).ReferenceCode;
但同时,(从域的角度来看)直接从
帐户
实体访问
产品组件
是没有意义的


我确信,如果不了解我的领域,这一切都有点难以理解,但我希望这足以得到一些好的反馈。

罗伯特链接到的文章是一篇好文章。我想补充一点,如果ProductComponent只存在于AccountElement的上下文中,AccountElement只存在于Account的上下文中,那么扩展一下,ProductComponent就存在于Account的上下文中。

如果您需要这种级别的嵌套对象来使您的对象模型工作,那么我就不会太担心Demeter定律。参见另见,谢谢,菲尔的文章很有帮助,而儿童的孩子与聚合根之间有着怎样的不可分割的联系这一问题在这里是非常关键的。这样看来,嵌套实体才有意义。我觉得这是正确的,因为在做出这个决定之后,代码的方向似乎更加直观。或者本着DDD的精神,我最好说它是对无处不在的语言更真实的抽象;)您是否考虑过将第二个聚合建模为复合?