域模型聚合

时间:2012-11-16 14:51:36

标签: c# architecture domain-driven-design domain-model

我刚读了一篇关于聚合的章节,发现我误解了一些东西。 我们有三个对象:成员,项目,出价。 以下是本书的代码片段:

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聚合的一部分吗?

2 个答案:

答案 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。进入的唯一方法是通过该项目。因此,该项是示例中的控制点。这有助于保持清晰和交易的能力。