引用子实体中的另一个聚合根?

时间:2014-12-15 16:50:54

标签: domain-driven-design

我想在DDD的帮助下对订单和产品概念进行建模,但我想知道如何处理它。

假设您的Order类具有OrderItem类作为其子级,Order是Aggregate Root,Order类具有OrderItems列表,并且每个OrderItem都具有对Product Class的引用。产品当然是聚合根。 我的意思是这样的事情:

public class Order{
...
public list<OrderItem> OrderItems {get;set;}
}

public class OrderItems{
...
public int Qty {get; set;}
public Product {get; set;}
}

public class Product{
...
}

但据我所知,我无法从Order Aggregate的子项引用Product Aggregate。怎么处理这个?

Tnx in forward。

1 个答案:

答案 0 :(得分:4)

在图书Architecting application for the enterprise的第202页,您可以看到图片。有各种有界的背景,其中两个真正与你需要的相似。 Order是一个聚合根,其子级为Order DetailOrder Detail反过来与Product有关系,Product是不同有界背景下聚合的aggegate根。

  

首先想到的是Order属于Product聚合。   但是,接下来您可能会发现存在用于处理产品的用例   在订单之外 - 例如产品目录。这使得   另一个根植于Product的aggergate。

所以......是的,聚合的孩子可以拥有对另一个聚合根的引用(即使在不同的有界上下文中)。

这是一个正确的选择吗?在这种情况下,正确的答案始终是:取决于。 什么?关于业务规则,以及如何处理将被吞噬的聚合&#34; (Order)由另一个更大的聚合({{1}})。