仓储模式封装了对数据源(数据库、API等)的访问逻辑,提供了领域逻辑和数据存储机制之间的抽象层。其主要目标是隐藏存储实现的细节,并确保对领域对象集合的操作。
优势:
C#代码示例:
public interface IUserRepository { User GetById(int id); void Add(User user); } public class UserRepository : IUserRepository { private readonly DbContext _context; public UserRepository(DbContext context) { _context = context; } public User GetById(int id) => _context.Users.Find(id); public void Add(User user) => _context.Users.Add(user); }
关键特点:
仓储是否需要了解数据库结构?
不需要。仓储应处理领域对象并隐藏存储细节。单独的数据访问层负责映射到数据库模式。
可以在仓储类中混合业务逻辑吗?
不可以。这违反了关注点分离原则:仓储只负责获取/保存数据。业务逻辑应移至服务/领域对象中。
仓储和DAO是一样的吗?
不完全一样。DAO与仓储模式是正交的,工作在表和记录层面,而仓储则与业务逻辑对象一起工作。仓储对业务实体集合进行抽象,DAO则更接近基础设施。