DDD-如何为聚合根建模?

时间:2019-02-23 22:16:19

标签: design-patterns domain-driven-design aggregate aggregateroot

我有一个名为product_catalog的域。 在我的域中,品牌可以拥有许多产品。 (一对多关系) 一个类别可以有许多产品,而一个产品可以属于许多类别。这是N对M的关系。

如果我将产品设计为聚合根,那么检索产品以创建品牌将毫无意义。除此之外,我需要检索所有品牌,并让用户可以创建更多品牌,因此我怀疑品牌也是一个聚合根。是吗?

类别和产品呢?

1 个答案:

答案 0 :(得分:1)

聚合中的实体子代没有自己的生命周期,即,实体对象不能在聚合外独立地存在,而是依赖于根实体的对象。子实体在集合体内具有本地唯一身份,而根实体具有全局唯一身份。

要知道某个实体是否是聚合根实体的子代,请问自己:该实体是否可以不存在根实体而存在?如果它可以单独存在,则它不是子级,它是另一个聚合的根,您应该通过id引用它。

  

所以我怀疑品牌也是一个聚合根。是吗?

是的,品牌是独立存在的,没有产品。

  

类别和产品呢?

嗯,我认为它们属于不同的集合,因为我将类别视为对产品进行分类的一种方式,但是产品是独立存在的。除此之外,该产品可能属于许多类别。因此,产品不是类别的子级。反之亦然。

类别和品牌是两个集合。

我对产品表示怀疑。它可能是Brand的实体子级。这取决于您的业务规则。产品归品牌所有吗?它可以单独存在吗?还是没有品牌就没有产品存在?