经过一个实例来讲明如何划分聚合与聚合根对象
场景:一个下订单的业务,一个订单必须有相应的客户信息,订单下有订单项,每一个订单项必须有相应的产品信息,产品有分类的信息。blog
1.根据这个基本的需求,咱们初步肯定的实体、值对象与关联关系为(这里采用EF的Model First):生命周期
2.通过业务深刻分析,以及聚合与聚合根肯定原则,最终咱们肯定的聚合与聚合根是(红色表明聚合根,蓝色表明聚合内的实体,灰色表明值对象):产品
划分与肯定理由
1.订单、客户与产品均可以在不一样的领域被独立访问到,因此应该是属于不一样聚合的聚合根。im
2.订单初看好像要依赖于客户才能存在,其实否则,一是订单的生命周期与客户的生命周期不是一致的,二是订单与客户之间也没有不变的一致性规则。查询
3.订单只须要下订单那个时刻客户的姓名、电话与地址等相关信息,因此做了一个值对象保存那个时刻的客户相关信息,因可能业务上须要经过订单查询客户当前的信息,因此作了一个客户ID关联到客户对象。img
4.订单项也只须要那个时刻的产品的名称、单价等信息,因此做了一个值对象保存那个时刻的产品相关信息,因可能业务上须要经过订单项查询产品当前的信息,因此做了一个产品ID关联到产品对象。co
5.产品初看好像要依赖于产品类别,实际上产品类别只是对产品的一种划分,因此产品类别作成值对象,若是业务上要对某个产品类别进行促销等业务逻辑,则产品类别应该划为一个单独聚合的聚合根。ps