md_files/自学/草稿.md

2.1 KiB
Raw Blame History

聚合 vs 领域服务 vs 仓储 —— 对比一览

特性 聚合Aggregate 领域服务Domain Service 仓储Repository
本质 相关实体和值对象的组合,以“聚合根”为唯一访问入口 无状态的业务逻辑单元,封装跨实体 / 跨聚合规则 抽象的数据访问接口,隐藏底层存储细节,为聚合提供持久化能力
状态 有状态——内部维护数据与不变式 无状态——仅暴露行为 无业务状态;实现层可能有缓存,但对外看作无状态
职责 1. 内部一致性2. 定义事务边界3. 提供领域行为(order.pay() 等) 1. 承载跨实体规则2. 协调多个聚合完成业务动作 1. 加载 / 保存聚合根2. 把 PO ↔️ Entity 映射3. 屏蔽 SQL/ORM/缓存等技术细节
边界 聚合边界:内部操作要么全部成功要么全部失败 无一致性边界,仅调用聚合或仓储 持久化边界:一次操作针对一个聚合;不负责业务事务(由应用层控制)
典型用法 Order.addItem(),Order.cancel() PricingService.calculate(...),InventoryService.reserveStock(...) orderRepository.findById(id),orderRepository.save(order)

快速记忆

  • 聚合:有数据 + 行为,是“业务发动机”
  • 领域服务:无数据,专管“发动机之间的协作”
  • 仓储:无业务规则,只负责把“发动机”存取到持久化介质

这样三者的定位就清晰了:

聚合管状态,领域服务管跨聚合业务,仓储管存取。”