领域驱动设计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);
}

说明:


findById
:根据ID查找聚合根

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);
© 版权声明

相关文章

暂无评论

none
暂无评论...