Skip to content

仓储(Repository)

仓储是领域驱动设计中负责持久化和检索聚合的模式,它隔离了领域模型与数据访问技术。

汽车生产案例

在汽车制造厂中,仓储可以理解为:

  • 零部件仓库(负责发动机、变速箱等核心部件的存储和管理)
  • 整车库存(负责成品车的存放和调拨)
  • 工具设备库(负责生产工具的保管和领用)

这些角色都负责管理特定资源的存储和检索,而不暴露底层存储细节。

主要特点

  1. 聚合导向:以聚合为单位进行持久化
  2. 领域焦点:接口定义在领域层
  3. 技术无关:隐藏具体存储实现
  4. 集合语义:提供类似集合的操作接口

示例

java
// 零部件仓储接口
interface PartRepository {
  // 保存零部件
  void save(Part part);
  
  // 根据零件号查找
  Part findByPartNumber(String partNumber);
  
  // 查找某车型的可用零件
  List<Part> findAvailablePartsForModel(String model);
  
  // 删除零件记录
  void delete(Part part);
}

// 整车仓储接口
interface CarInventoryRepository {
  // 入库新车
  void addToInventory(Car car);
  
  // 根据VIN查找
  Car findByVin(String vin);
  
  // 查找待交付车辆
  List<Car> findCarsReadyForDelivery();
  
  // 车辆出库
  void removeFromInventory(Car car);
}

使用场景

  1. 需要持久化聚合
  2. 需要从存储中检索聚合
  3. 需要解耦领域模型与基础设施
  4. 需要统一数据访问接口

设计原则

  1. 聚合边界:每个聚合对应一个仓储
  2. 接口定义:仓储接口定义在领域层
  3. 实现分离:仓储实现在基础设施层
  4. 避免通用:避免通用仓储,应针对聚合定制