0

我刚刚阅读了关于聚合的一章,发现我误解了一些东西。我们有三个对象:Member、Item、Bid。这是书中的代码片段:

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 是聚合根。但是,我认为没有会员的投标也没有意义。这似乎是合乎逻辑的。那么在这种情况下,什么是投标?它是项目聚合的一部分吗?

4

2 回答 2

2

首先,聚合聚合根不同的概念。在这种情况下,Item 和 Bid 可能是同一个聚合的一部分,但只有一个,我认为 Item 是聚合根 (AR)。

定义哪个类是 AR 高度依赖于有界上下文 (BC)。此外,该 Member 类可能仅表示为该 BC 中的简单 Id,这不是您可能在不同 BC 中使用的 Member(您会看到 DDD 非常棘手)。

Item 涉及 Bid 和 Member,它们共同构成一个聚合,但 Item 是聚合根,即其他人用来管理聚合的外观对象。

于 2012-11-16T15:13:00.283 回答
1

虽然不完全相同,但这与这个 SO question非常相似,Richard Cirerol 的答案是一个不错的答案。

但是,我会向您指出第 71 页的书,其中的图表显示出价引用了成员,因此可以到达 OUT 以获取该信息,但该成员无法到达 IN。进入的唯一方法是通过该项目。因此,该项目是示例中的控制点。这有助于保持清晰和事务性的界限。

于 2012-11-16T15:03:28.350 回答