DDD:用于引用非聚合根的解决方案

时间:2012-11-15 11:54:57

标签: domain-driven-design aggregateroot

我有两个聚合根和两个非聚合根实体:

entity relationships

我知道,关系D -> B打破了DDD原则。

我听说,在大多数情况下,解决方案是使引用的实体成为新的聚合根。

但是如果 B是A 真正的孩子(B不能没有A的话),那么将B作为一个新的聚合根真的是一个选项吗?

2 个答案:

答案 0 :(得分:2)

我同意你的观点,有时将一个实体与其聚合体分开是没有意义的,因为它在其中很自然。这就是为什么我没有完全卖掉一些recommend的“小聚合”方法的原因之一。

在这种情况下,你可以做的是通过遍历A的实例来获得对B的引用,而不是直接获取它。毕竟,如果没有A就不能存在B,那么聚合之外的对象就没有理由知道某个特定的B并且不知道它的A。

答案 1 :(得分:2)

首先,这不是DDD思维,这是RDBMS的思考。在DDD中,您可以像在现实世界中那样对业务流程进行建模,您不具备一对多等概念。所以忘记DB,外键等等。

你有限的背景(BC)是什么?每个聚合都是BC本身,因此如果它们被命名为相同,它们可以具有不同的概念表示。

如果我理解,似乎A B C D是单个聚合的一部分。这并不意味着它们仅在该聚合中定义,并且仅以该形式定义。但是,如果C在某些其他BC中是完全成熟的AR,则很可能在此上下文中仅表示为id或几个属性(接口对于这些东西非常方便)。因此,即使它们都被命名为C,它们也是不同的,只具有特定上下文所需的行为。

DDD适用于许多BC,模型仅适用于一个BC。这意味着在您的应用程序中,根据每个BC,您将拥有多个A,B,C定义,并且每个定义可能略有不同。这意味着实际上只有一种模型适用于所有情况(我不在这里谈论CQRS,只是DDD)。

我对这个领域了解不多,实际上想出了更具体的东西。但简单地说,尝试按照现实和现实的方式来表现事物。