我有两个聚合根和两个非聚合根实体:
我知道,关系D -> B
打破了DDD原则。
我听说,在大多数情况下,解决方案是使引用的实体成为新的聚合根。
但是如果 B是A 的真正的孩子(B不能没有A的话),那么将B作为一个新的聚合根真的是一个选项吗?
答案 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)。
我对这个领域了解不多,实际上想出了更具体的东西。但简单地说,尝试按照现实和现实的方式来表现事物。