IDDD 10 Aggregate 发表于 2014-08-01 | 分类于 Art << 实现领域驱动设计 >> 十: 聚合聚合由实体和值对象在一致性边界内组成,却是最不容易理解的。 MindMapping Source (Org Format):12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455* 聚合** 原则*** 在一致性边界内建模真正的不变条件**** 不变的业务规则**** 事务一致性**** 一致性边界*** 设计小聚合**** 更好性能和伸缩性**** 根实体 Root Entity*** 通过唯一标识引用其他聚合**** 通过标识引用使多个聚合协调工作**** 建模对象导航性***** 失联领域模型 (Disconnected Domain Model)****** 资源库****** 领域服务***** 通过应用服务来处理依赖关系**** 不在同个事务中修改多个聚合实例*** 在边界之外使用最终一致性**** 由边界内来控制一致性 — — 事务一致性**** 由边界外来控制一致性 — — 最终一致性** 打破原则的理由 有很多因素需要我们做出妥协,但不应该找各种借口来打破原则。*** 方便用户界面*** 缺乏技术支持*** 全局事务*** 查询性能** 通过发现,深入理解*** 重新思考设计*** 估算聚合成本*** 常用用例场景*** 内存消耗*** 探索另外的设计*** 实现最终一致性** 实现*** 创建具有唯一标识的根实体 将实体建模成聚合根(Aggregate Root)*** 优先使用值对象*** 迪米特法则和“告诉非询问”原则**** Law of Dememter***** “最小知识”原则***** 任何对象的任何方法只能调用****** 自身****** 传入的参数对象****** 它所创建的对象****** 自身包含的其他对象,并且拥有直接访问权**** Tell, Dont Ask***** 一个对象不应该被告知该怎么做*** 乐观并发**** 为根实体创建版本号**** 合理控制版本号*** 避免依赖注入**** 在聚合内注入 资源库/领域服务 有害,可在应用服务中使用