- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经实现了存储库模式并且效果很好。
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
}
当我想从 IServiceRepository
访问某些方法时在 Controller 中我这样做
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;
}
}
如你所见,我注入(inject)了 IRepositories
和 IServiceRepository
在这种情况下。有时我只注入(inject) IRepositories
或 IServiceRepository
视需求而定。
问题是也许我应该移动所有 IRepositories
进入IServiceRepository
.并且在所有 Controller 中只嵌入 IServiceRepository
并访问 IRepositories
来自 IServiceRepository
?这个实现对我来说看起来更清楚,因为只有 IServiceRepository
将被注入(inject) Controller 。但是要访问例如一个 Repositorie<User>
来自 ServiceRepository
将需要在 ServiceRepository
中构建和注入(inject)所有其他存储库,所以它可能会减慢整个应用程序。你怎么看?
最佳答案
我的回答有争议,所以请多多包涵:)
进入正题
构建和注入(inject)存储库应该几乎没有时间。我假设您的存储库在创建时不会打开任何连接,所以不要为微优化而烦恼,只要让它工作就可以了:)
您可以合并您的界面,只要结果界面很小(比如不超过 10 个左右的方法)、重点突出且目的明确。
考虑这段代码
public interface IServiceRepository
{
User GetUser(int id);
User GetUser(string email);
User GetUser(string email, byte[] password);
//SkipCode
}
它告诉我什么?好吧,从通用名称我无法理解这个接口(interface)的作用,它就像服务的服务,抽象之上的抽象。但是从方法定义来看,我看到它对 User
做了一些事情。
为什么要明确使用 IUnitOfWork
?您使用的数据提供商是否尚未实现?
而不是所有这些架构(当然如果可能的话),直接使用ORM,这很容易做和维护,可靠和快速。
关于c# - IServiceRepository 中的存储库模式 IRepository<T>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11559499/
我已经实现了存储库模式并且效果很好。 public interface IServiceRepository { User GetUser(int id); User GetUser(
我是一名优秀的程序员,十分优秀!