4.4、聚合根设计
分类: DDD领域驱动设计实战
聚合根设计
聚合根是聚合的入口,负责维护聚合的一致性。合理设计聚合根是 DDD 设计的核心。本节将学习如何设计聚合根。
本节将学习:聚合根识别、聚合边界、不变性约束,以及聚合设计原则。
聚合根识别
识别方法
识别聚合根的方法:
- 业务规则:需要维护业务规则的对象
- 生命周期:有完整生命周期的对象
- 唯一标识:有唯一标识的对象
订单聚合根示例
public class Order { private Long id; // 聚合根标识 private String orderNo; private Long userId; private Money totalAmount; private OrderStatus status; private List<OrderItem> items; // 聚合内的实体 // 聚合根方法 public void addItem(OrderItem item) { // 维护聚合一致性 } public void calculateTotal() { // 计算总金额 } }
聚合边界
边界定义
聚合边界定义了:
- 哪些对象属于聚合
- 聚合的一致性范围
- 聚合的访问入口
边界示例
不变性约束
约束定义
不变性约束是聚合必须满足的条件:
- 订单总金额必须等于订单项金额之和
- 订单项数量必须大于0
- 订单状态必须符合状态流转规则
约束实现
public class Order { public void addItem(OrderItem item) { // 验证不变性约束 if (item.getQuantity() <= 0) { throw new IllegalArgumentException("Quantity must be greater than 0"); } items.add(item); calculateTotal(); // 维护一致性 } }
聚合设计原则
设计原则
聚合设计原则:
- 小聚合:保持聚合尽可能小
- 通过ID引用:跨聚合通过ID引用
- 最终一致性:跨聚合使用最终一致性
官方资源
- DDD 聚合设计:https://www.domainlanguage.com/ddd/
本节小结
在本节中,我们学习了:
第一个是聚合根识别。 识别需要维护业务规则的对象。
第二个是聚合边界。 定义聚合的边界和一致性范围。
第三个是不变性约束。 定义聚合必须满足的条件。
第四个是聚合设计原则。 小聚合、ID引用、最终一致性。
这就是聚合根设计。合理设计聚合根,是保证数据一致性的关键。
在下一节,我们将学习如何设计实体和值对象。