首页 > 代码库 > 聚合的划分(二)---再次总结

聚合的划分(二)---再次总结

聚合划分原则:

  1. 有很多个实体、值对象表现了一个完整的概念,他们之间是有很强关联的。
  2. 找最小的业务场景
  3. 找出聚合根(先确定可能是聚合根的实体,可能包含的实体),确定的原则是:具有独立的生命周期
  4. 确定聚合根的边界,如包括 Entity1,E2,E3.。。。这些实体要依赖于聚合根的存在而存在。聚合边界确定法则:根据不变性约束规则(Invariant),有两类:1)聚合边界内必须具有哪些信息,如果没有这些信息就不能称为一个有效的聚合;2)聚合内的某些对象的状态必须满足某个业务规则;
  5. 对象间是有规则的(如余额不为0,名称不能空,某实体不能0个),而且能影响到对方。
  6. 对象都有相同的生命周期。
  7. 对象太多,如超过了8-10个,不行,不能太大。性能不好了。如不知道该放还是不放,不明确的时候就不放一起。

 

反向验证:

  1. 验证一个实体是否属于这个聚合:他还可以属于其他聚合吗?离开了这个聚合根是不是就失去了意义。
  2. 实体变化了,影响聚合根的内容了吗?

再次验证:

  1. 是否“同生死,共存亡”,没有了这个实体,是否这个聚合或者是业务规则就不完整了;

 

 

聚合根的特征:(怎样找到聚合根)

  1. 可以独立存在
  2. 有独立的生命周期(生命开始和结束)。
  3. 其他实体或对象依赖它而存在
  4. 具有全局的唯一标识
  5. 除了唯一标识外,其他的所有属性都是可变的。

 

值对象的特征:

  1. 只读的
  2. 没有唯一标识,不存在这个值对象或那个值对象的说法;
  3. 没有生命周期,因为只是一个值。

 

 

实体的特征:

  1. 只有在聚合内部有唯一的本地标识
  2. 所有属性都是可变的。
  3. 实体的生命周期从属于聚合根,由聚合根维护

 

根的引用规则:

  1. 根到根:通过ID关联
  2. 根到内部实体:直接对象应用
  3. 根到值对象:直接对象引用

实体的引用规则:

  1. 可以直接引用聚合内的根、实体、值对象
  2. 能引用外部根,但要以ID的方式关联,如果要关联其他聚合的实体,则要先聚合根ID再到实体的原则

值对象的引用规则:

  1. 只需确保值对象是只读的即可
  2. 推荐值对象的所有属性都尽量是值对象;

聚合的划分(二)---再次总结