【发布时间】:2015-09-19 18:16:09
【问题描述】:
假设我有以下回购模式:
interface IGenericRepo<T> where T : class
{
IEnumerable<T> GetAll();
T GetById(object id);
void Insert(T obj);
void Update(T obj);
void Delete(T obj);
void Save();
}
interface ICustRepo : IGenericRepo<Cust>
{
IEnumerable<Cust> GetBadCust();
IEnumerable<Cust> GetGoodCust();
}
public class CustRepo : ICustRepo<Cust>
{
//implement method here
}
然后在我的控制器中:
public class CustController
{
private ICustRepo _custRepo;
public CustController(ICustRepo custRepo)
{
_custRepo = custRepo;
}
public ActionResult Index()
{
var model = _custRepo.GetAll();
return View(model);
}
public ActionResult BadCust()
{
var model = _custRepo.GetBadCust();
return View(model);
}
}
基本上我的模式是这样的
View <-> Controller -> Repo -> EF -> SQL Server
但我看到很多人这样做
View <-> Controller -> Service -> Repo -> EF -> SQL Server
所以我的问题是:
为什么以及何时需要
service layer?不是因为每个非泛型方法都已经在ICustRepo中实现了,而是添加了另一个不必要的层吗?服务层应该返回
DTO还是我的ViewModel?服务层应该与我的 repo 1:1 映射吗?
我已经环顾了几天,但我对答案并不满意。
任何帮助将不胜感激,并为英语不好表示歉意。
谢谢。
更新:
Difference between Repository and Service Layer?
我已经读过了。我已经知道这两者之间的区别,但我想知道为什么和目的。所以这并不能回答我的问题
【问题讨论】:
标签: c# asp.net-mvc entity-framework design-patterns repository