仓储(Repository)
仓储是领域驱动设计中负责持久化和检索聚合的模式,它隔离了领域模型与数据访问技术。
汽车生产案例
在汽车制造厂中,仓储可以理解为:
- 零部件仓库(负责发动机、变速箱等核心部件的存储和管理)
- 整车库存(负责成品车的存放和调拨)
- 工具设备库(负责生产工具的保管和领用)
这些角色都负责管理特定资源的存储和检索,而不暴露底层存储细节。
主要特点
- 聚合导向:以聚合为单位进行持久化
- 领域焦点:接口定义在领域层
- 技术无关:隐藏具体存储实现
- 集合语义:提供类似集合的操作接口
示例
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);
}
使用场景
- 需要持久化聚合
- 需要从存储中检索聚合
- 需要解耦领域模型与基础设施
- 需要统一数据访问接口
设计原则
- 聚合边界:每个聚合对应一个仓储
- 接口定义:仓储接口定义在领域层
- 实现分离:仓储实现在基础设施层
- 避免通用:避免通用仓储,应针对聚合定制