Skip to content

聚合(Aggregate)

聚合是领域驱动设计中维护业务一致性的重要模式,它将一组相关对象组合成一个逻辑单元。

汽车生产案例

在汽车制造厂中,聚合可以理解为:

  • 整车装配(包含车身、发动机、变速箱等核心部件)
  • 发动机总成(包含缸体、活塞、涡轮等关键零件)
  • 生产线工位(包含设备、工具、操作手册等资源)

这些业务单元内部有明确的边界,外部只能通过聚合根访问。

主要特点

  1. 边界明确:定义哪些对象属于聚合
  2. 聚合根:唯一外部访问入口
  3. 一致性保证:内部对象状态保持一致
  4. 事务边界:通常一个聚合对应一个事务

示例

java
// 整车装配聚合
class CarAssembly {
  private String assemblyId; // 聚合根
  private Body body;
  private Engine engine;
  private Transmission transmission;
  
  // 外部只能通过聚合根修改内部状态
  public void installEngine(EngineSpec spec) {
    // 业务规则校验
    if (!body.isEngineCompatible(spec)) {
      throw new IncompatibleEngineException();
    }
    this.engine = new Engine(spec);
  }
}

// 发动机总成聚合
class EngineAssembly {
  private String engineId; // 聚合根
  private CylinderBlock block;
  private List<Piston> pistons;
  private Turbocharger turbo;
  
  // 业务逻辑封装在聚合内部
  public void assemble() {
    // 装配逻辑和规则校验
  }
}

设计原则

  1. 小聚合:尽量保持聚合小巧
  2. 强一致性:聚合内部保持强一致性
  3. 最终一致性:聚合间通过事件实现最终一致性
  4. 引用其他聚合:通过ID而非对象引用