我想在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。
答案 0 :(得分:4)
在图书Architecting application for the enterprise的第202页,您可以看到图片。有各种有界的背景,其中两个真正与你需要的相似。 Order
是一个聚合根,其子级为Order Detail
。 Order Detail
反过来与Product
有关系,Product
是不同有界背景下聚合的aggegate根。
首先想到的是
Order
属于Product
聚合。 但是,接下来您可能会发现存在用于处理产品的用例 在订单之外 - 例如产品目录。这使得 另一个根植于Product
的aggergate。
所以......是的,聚合的孩子可以拥有对另一个聚合根的引用(即使在不同的有界上下文中)。
这是一个正确的选择吗?在这种情况下,正确的答案始终是:取决于。
什么?关于业务规则,以及如何处理将被吞噬的聚合&#34; (Order
)由另一个更大的聚合({{1}})。