DDD哪个是根聚合根?

时间:2015-12-22 20:03:27

标签: domain-driven-design aggregateroot

许多例如订单和订单行都是有道理的,例如:

Order是包含OrderLines AR Customer AR ,其中包含Orders

问题是,包含Customer AR 是什么? 我想它可能就像“购物”。

所以,shop.AddCustomer(customer) ......

但是,怎么去商店? 如果它是 AR (实体),则它具有ID,因此shop.GetById(shopId)。如果我只有一个商店,这如何与持久性一起工作?

我应该有一张桌子(商店)吗? Shop是一个内存中的对象,其集合为Customers

1 个答案:

答案 0 :(得分:6)

那里你错了。 聚合不包含其他聚合!他们只能通过ID引用它们。

聚合是一组密切相关的实体和值对象。聚合形成了它们周围的一致性边界。 聚合根是该聚合中可全局寻址的根实体。因此,在您使用OrderOrderLines的示例中,Order确实可能是AR。

另一方面,

Customer只会通过ID引用Orders,如果它是一个单独的聚合。

要检索聚合,通常使用存储库。您可以通过指定聚合的ID或其他合适的搜索参数来通过存储库加载聚合。