聚合是领域驱动战术设计最为核心的技术要素,也是制约战术设计成败与质量的关键。本次工作坊将根据一个实际案例的对象模型,按照领域驱动设计的聚合设计原则识别聚合,以求获得高质量的聚合模型。
在《Domain-Driven Design Reference》中,Eric Evans阐释了何谓聚合模式:“将实体和值对象划分为聚合并围绕着聚合定义边界。选择一个实体作为每个聚合的根,并允许外部对象仅能持有聚合根的引用。作为一个整体来定义聚合的属性和不变量(Invariants),并将执行职责(enforcement responsibility)赋予聚合根或指定的框架机制。”
解读这一定义,可以得到如下聚合的基本特征:
- 聚合是包含了实体和值对象的一个边界
- 聚合内包含的实体和值对象形成了一棵树,只有实体才能作为这棵树的根,这个根称为聚合根(Aggregate Root),这个实体称为根实体
- 外部对象只允许持有聚合根的引用,如此才能起到边界的控制作用
- 聚合作为一个完整的领域概念整体,在其内部会维护这个领域概念的完整性,体现业务上的不变量约束
- 由聚合根统一对外提供履行该领域概念职责的行为方法,实现内部各个对象之间的行为协作
本次工作坊通过一个实际案例按照一种“庖丁解牛”式的聚合设计过程进行,帮助你准确地识别聚合,确定聚合的边界。