0、聚合就是一组对象组合。
- 0.0 聚合是一组关联对象,我们将其视为一个单元,用于数据更改。
- 0.1 每个aggregate都有一个根和一个边界
- 0.1.0 边界定义了聚集内部的内容。
- 0.1.1 根是包含在聚合中的单个特定的entity(User , Order)。
- 0.2 聚合根是聚合中唯一允许外部对象持有引用的成员,尽管边界内的对象可能持有对彼此的引用。
- 0.3 根以外的实体具有本地身份,但该身份仅需要在聚合内可区分,因为没有外部对象可以访问根实体的上下文
1、为什么引入聚合?
- 1.1 保证多个更改的一致性应用于一组对象,强调局和内部的一致性。
- 1.2 对象之间会有复杂的关联关系,保证事务的一致性比较难
- 1.3 需要维护不变的对象,而不仅仅是离散对象。
2、聚合规则
- 1.1 保护聚合边界内的不变量。private
- 1.2 将聚合设计为越小越好。(减小出现问题的排查量,更容易执行一致性规则,和其他聚合交互时出现并发冲突的可能性更小)
- 1.3 仅按身份/Id 引用其他聚合。(Entity ->Id)
- 1.4 用域事件更新其他聚合。(从另一个聚合更新一个聚合)
3、最终一致性
- 3.1 如果你需要即时的一致性,合并对象到一个聚合。
- 3.2 如果您可以容忍EVENTUAL一致性,请使用域事件