我刚读了一篇关于聚合的章节,发现我误解了一些东西。 我们有三个对象:成员,项目,出价。 以下是本书的代码片段:
public class Member
{
public string Id {get; set;}
...
}
public class Item
{
public string Id {get; set;}
public IList<Bid> Bids {get; set;}
...
}
public class Bid
{
public Member Member {get; set;}
...
}
Autor写道,物品及其出价是一个汇总,因为没有物品,出价没有意义。所以Item和Member是聚合根。 但是我认为没有会员,Bid也没有意义。它似乎是合乎逻辑的。那么这种情况下的出价是什么?它是Item聚合的一部分吗?
答案 0 :(得分:2)
首先,聚合和聚合根是 不同的概念 。在这种情况下,Item和Bid可能是同一聚合的一部分,但只有一个,我认为Item是聚合根(AR)。
定义哪个类是AR高度依赖于有界上下文(BC)。此外,该成员类可能仅表示为该BC中的简单Id,而不是您可能在不同BC中使用的成员(您认为DDD非常棘手)。
项目涉及Bid和Member,它们一起形成聚合,但Item是聚合根,即其他人用来管理聚合的Facade对象。
答案 1 :(得分:1)
虽然不完全相同,但这与this SO question非常相似,理查德·西雷罗尔的回答是不错的。
但是,我会指向the book on page 71,其中图表显示出价具有对成员的引用,因此可以到达OUT以获取该信息,但该成员无法到达IN。进入的唯一方法是通过该项目。因此,该项是示例中的控制点。这有助于保持清晰和交易的能力。