use*_*975 3 architecture nhibernate model-view-controller asp.net-mvc design-patterns
我正在使用MVC,Nhibernate和IOC容器进行企业应用程序.
我三层:
DAL - Nhibernate数据存储库
public class CustomerRepository : Repository<int>,ICustomerRepository
{
public CustomerRepository(IUnitOfWork unitOfWork)
: base(unitOfWork)
{
}
}
Run Code Online (Sandbox Code Playgroud)
BLL - 业务层
public class CustomerManager
{
private readonly ICustomerRepository _repository;
public CustomerManager(ICustomerRepository repository)
{
_repository = repository;
}
public IList<Customer> GetAll()
{
return _repository.GetAll<Customer>();
}
}
Run Code Online (Sandbox Code Playgroud)
演示 - MVC控制器
private readonly IUnitOfWork _unitOfWork;
private readonly ICustomerRepository _repository;
private readonly CustomerManager _manager;
public HomeController(IUnitOfWork unitOfWork, ICustomerRepository repository)
{
_unitOfWork = unitOfWork;
_repository = repository;
_manager = new CustomerManager(_repository);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用IOC容器来注册工作单元和CustomerRepository对象.国际奥委会集装箱工作正常.
关于这个解决方案的问题是我在控制器中有CustomerRepository引用.这种架构是好还是有更好的方法来实现它?
您不应该需要/拥有IUnitOfWork或ICustomerRepository在控制器中,使用IoC容器,您应该能够注册CustomerManager,然后执行此操作:
private readonly CustomerManager _manager;
public HomeController(CustomerManager customerManager)
{
_manager = customerManager;
}
Run Code Online (Sandbox Code Playgroud)
IoC容器应该理解依赖链并根据需要注入所有各种依赖项.
即MVC将尝试HomeController从IoC容器中获取一个,而IoC容器又需要CustomerManager...因此IoC容器将尝试获取a CustomerManager,而这又需要ICustomerRepository...所以IoC容器将尝试...你得到了点.
我也会从CustomerManager(ICustomerManager可能)提取接口的程度去除耦合并使Controller更容易测试.
| 归档时间: |
|
| 查看次数: |
623 次 |
| 最近记录: |