4.4聚合根设计

分类: DDD领域驱动设计实战

聚合根设计

聚合根是聚合的入口,负责维护聚合的一致性。合理设计聚合根是 DDD 设计的核心。本节将学习如何设计聚合根。

本节将学习:聚合根识别、聚合边界、不变性约束,以及聚合设计原则。

聚合根识别

识别方法

识别聚合根的方法:

  1. 业务规则:需要维护业务规则的对象
  2. 生命周期:有完整生命周期的对象
  3. 唯一标识:有唯一标识的对象

订单聚合根示例

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(); // 维护一致性 } }

聚合设计原则

设计原则

聚合设计原则:

  1. 小聚合:保持聚合尽可能小
  2. 通过ID引用:跨聚合通过ID引用
  3. 最终一致性:跨聚合使用最终一致性

官方资源

本节小结

在本节中,我们学习了:

第一个是聚合根识别。 识别需要维护业务规则的对象。

第二个是聚合边界。 定义聚合的边界和一致性范围。

第三个是不变性约束。 定义聚合必须满足的条件。

第四个是聚合设计原则。 小聚合、ID引用、最终一致性。

这就是聚合根设计。合理设计聚合根,是保证数据一致性的关键。

在下一节,我们将学习如何设计实体和值对象。