领域驱动设计DDD 仓储(Repository)详解
一、仓储(Repository)定义
仓储是领域驱动设计中的一个重要模式。它的核心作用是为领域模型提供对象持久化的抽象接口,让领域层不用关心数据存储的细节。
简单来说,仓储像一个集合管理器,负责为领域对象(通常是聚合根)提供查找、保存、删除等操作。
二、仓储的作用
领域与数据存储解耦
领域模型只与仓储接口交互,不关心底层是数据库、文件还是远程服务。
统一访问入口
仓储为聚合根对象提供统一的访问、管理入口。
简化业务逻辑
业务代码只需关心“我要查找/保存某个对象”,而不用关心怎么查找/保存。
三、仓储的设计原则
只为聚合根提供仓储接口
仓储只负责聚合根的存取,聚合内部成员的存取由聚合根负责。
接口与实现分离
仓储通常定义为接口,具体实现可以基于ORM、SQL、NoSQL等。
只暴露必要的方法
仓储接口只暴露领域需要的操作,如根据ID查找、保存、删除等。
四、仓储的典型接口设计
以订单(Order)聚合根为例,仓储接口如下:
public interface OrderRepository {
Order findById(String orderId);
void save(Order order);
void delete(Order order);
List<Order> findByCustomerId(String customerId);
}
说明:
:根据ID查找聚合根
findById
:保存聚合根(新增或更新)
save
:删除聚合根
delete
:按业务需要增加查询方法
findByCustomerId
五、仓储的实现示例
以Java为例,假设用JPA实现:
public class JpaOrderRepository implements OrderRepository {
@PersistenceContext
private EntityManager em;
@Override
public Order findById(String orderId) {
return em.find(Order.class, orderId);
}
@Override
public void save(Order order) {
if (order.getId() == null) {
em.persist(order);
} else {
em.merge(order);
© 版权声明
文章版权归作者所有,未经允许请勿转载。
相关文章
暂无评论...