我已经实现了存储库模式,并且效果很好。
public interface IServiceRepository
{
User GetUser(int id);
User GetUser(string email);
User GetUser(string email, byte[] password);
//SkipCode
}
//Service repository where I keep extended methods for database manipulation
public class ServiceRepository : IServiceRepository
{
private readonly IRepository<User> _userRepository;
private readonly IRepository<Order> _orderRepository;
private readonly IUnitOfWork _unitOfWork;
public ServiceRepository(IRepository<User> userRepository, IRepository<Order> orderRepository, IUnitOfWork unitOfWork)
{
}
//SkipImplementation
}
当我想从Controller中的
IServiceRepository
访问某些方法时,请执行此操作public class AccountController : Controller
{
private readonly IRepository<OrderDetail> _orderDetailRepository;
private readonly IRepository<UserDetail> _userDetailRepository;
private readonly IServiceRepository _serviceRepository;
public AccountController(IRepository<OrderDetail> orderDetailRepository, IRepository<UserDetail> userDetailRepository, IServiceRepository serviceRepository)
{
_orderDetailRepository = orderDetailRepository;
_userDetailRepository = userDetailRepository;
_serviceRepository = serviceRepository;
}
}
如您所见,在这种情况下,我注入了
IRepositories
和IServiceRepository
。有时我会根据需要只注入IRepositories
或IServiceRepository
。问题可能是我应该将所有
IRepositories
移到IServiceRepository
中。并且在所有控制器中仅嵌入IServiceRepository
并从IRepositories
访问IServiceRepository
吗?对我来说,这种实现看起来更清晰,因为只有IServiceRepository
会被注入到控制器中。但是要从Repositorie<User>
访问一个ServiceRepository
,需要在ServiceRepository
中构建和注入所有其他存储库,因此这可能会使整个应用程序变慢。你怎么看? 最佳答案
我的回答是有争议的,所以请忍受我:)
要点
建立和注入存储库几乎不需要时间。我假设您的存储库在创建时不会打开任何连接,所以不要为微优化而烦恼,只需使其工作即可:)
您可以合并您的接口,只要结果接口很小(例如不超过10个左右的方法),有重点并且有明确的目的。
旁注
存储库模式有什么需求?您是否允许(或在最近的未来计划中)在数据库之间轻松切换?在大多数情况下,存储库是一个严重的过度杀伤和维护问题。
考虑这段代码
public interface IServiceRepository
{
User GetUser(int id);
User GetUser(string email);
User GetUser(string email, byte[] password);
//SkipCode
}
它告诉我什么?好吧,从通用名称来看,我无法理解该接口的作用,就像服务的服务,抽象而不是抽象。但是从方法定义中,我看到它对
User
起作用。为什么要显式使用
IUnitOfWork
?您所使用的数据提供商尚未实现该功能吗?代替所有这些架构(当然,如果可能的话),直接使用ORM,这是易于执行和维护,可靠且快速的。