| 职责 | 按标识获取、保存、删除聚合根 |
|---|---|
| 边界 | 一个聚合根对应一个仓储;不返回裸数据集 |
| 实现 | 通常由基础设施层实现接口,领域层只依赖抽象 |
仓储与 DAO 的分工
| 维度 | 仓储 | DAO |
|---|---|---|
| 抽象层次 | 领域聚合的集合语义 | 表或记录的 CRUD 操作 |
| 返回对象 | 聚合根等完整领域对象 | 行记录或持久化实体 |
| 查询职责 | 按聚合标识存取,复杂查询外移 | 常承载各类查询方法 |
- 接口只放聚合根级别的存取方法,避免堆砌查询条件
- 实现放基础设施层,领域层仅依赖接口
- 复杂读取走独立读模型或查询服务
- 每次事务只变更一个聚合,由工作单元统一提交
- 测试可用内存实现替换数据库,保持领域测试轻快
- 命名用领域语言(如 findByOrderNo),避免 getTableData 式技术命名
| 标识策略 | 聚合标识在应用侧生成(如 UUID),不依赖数据库自增,便于测试与迁移 |
|---|---|
| 加载方式 | 按标识整聚合加载;需要部分数据时先检查聚合边界是否被拆错 |
| 测试建议 | 领域测试配内存仓储,真实映射与 SQL 交给集成测试验证 |
复杂报表与多表联查需求不要硬塞进仓储,用独立的查询服务或读模型更清晰。