MVC存储库体系结构和访问不同的表

Bre*_*ent 3 .net c# architecture asp.net-mvc

感谢您帮助我理解其中的一些内容:

假设我在MVC应用程序中有2个控制器 - 1个控制与销售人员相关的viewModels 1控制与销售相关的viewModels

每个都有自己的存储库,使用Entity框架访问数据(代码优先)

这两个存储库都设置为处理依赖注入,但也有0个参数构造函数,默认值使用相应的EF dataAccess.

salespeople控制器使用_salesPeopleRepository.getAllSalesPeople()函数,该函数返回一个销售人员列表以填充索引视图.

销售控制器需要访问相同的列表来填充下拉列表.

有几种方法可以将信息提供给销售控制人员,我想知道哪些选项被认为是最佳实践:

a)在控制器中

db = new DataContext();
_saleRepos = new SalesRepository(db);
_salesPeople = new SalesPeopleRepository(db);
 .....
modelA.SalePeopleSelectList = SelectList(_salesPeople.getAllSalesPeople(),"id","name")
Run Code Online (Sandbox Code Playgroud)

b)在SalesRepository中 - 使用EF本身:

public IEnumerable<salesPerson> getAllSalesPeople()
{ 
    return _db.SalesPeople.ToList();
}
Run Code Online (Sandbox Code Playgroud)

c)或在调用函数之前实例化和注入相同的数据访问对象

public IEnumerable<salesPerson> getAllSalesPeople()
{ 
    return (new SalesPersonRepository(_db)).getAllSalesPeople();
}
Run Code Online (Sandbox Code Playgroud)

编辑

如果答案是),应该如何自定义提供商家的逻辑是1个库调用 - 例如说销售有STOREID和仓库检查该STOREID进入了销售的营业员STOREID匹配.是否应该通过salesPerson存储库或直接从dataContext对象访问用于商业逻辑目的的salesPerson对象(在salesRepository中)?

感谢您的想法和经验

Gar*_*ger 5

SalesRepositorySalesPerson表中检索数据没有意义.数据访问逻辑应该集中在SalesPeopleRepository.在我看来,在存储库中复制方法只会使水变得混乱.

那么为什么不在销售控制器中同时使用SalesRepositorySalesPeopleRepository使用它?我只是实例化一个实例SalesPeopleRepository并使用那里已经定义的方法.

此外,如果您的控制器使用依赖注入,您可以将存储库传递给构造函数:

public SalesController (ISalesRepository salesRepository, ISalesPeopleRepository salesPeopleRepository)
{
   this._salesRepository = salesRepository;
   this._salesPeopleRepository = salesPeopleRepository;
}
Run Code Online (Sandbox Code Playgroud)