Asp.net mvc MVC3设计-存储库模式和服务层
我读了几本关于MVC的书和文章,并了解了存储库模式和服务层 控制器应该能够通过存储库模式获取实体,还是必须从服务层检索数据 编辑:我在服务层中有如下代码Asp.net mvc MVC3设计-存储库模式和服务层,asp.net-mvc,design-patterns,service,repository,Asp.net Mvc,Design Patterns,Service,Repository,我读了几本关于MVC的书和文章,并了解了存储库模式和服务层 控制器应该能够通过存储库模式获取实体,还是必须从服务层检索数据 编辑:我在服务层中有如下代码 public UserInfo GetModel(int userInfoID) { return userInfoRepo.Get(userInfoID); } public UserInfo GetUserByPortalID(string portalID) { return userInfoRepo.GetByPort
public UserInfo GetModel(int userInfoID)
{
return userInfoRepo.Get(userInfoID);
}
public UserInfo GetUserByPortalID(string portalID)
{
return userInfoRepo.GetByPortalID(portalID);
}
public UserInfo GetModelByUserName(string username)
{
return userInfoRepo.GetByUserName(username);
}
如果服务中的一个方法只调用存储库中的另一个方法,那么有必要让控制器检查该服务吗
控制器应该能够通过存储库模式获取实体,还是必须从服务层检索数据
理想情况下,控制器应该只使用服务层,服务层本身依赖于一个或多个存储库,以便将一个或多个简单的CRUD操作聚合到业务操作中。但在一些简单的应用程序中,您可能不需要服务层,而让控制器直接使用存储库。什么更适合您以及您的风格始终是一个问题。至于我,我更喜欢从控制器操作访问服务层。然后服务将访问存储库模型
public class UserController : MyServiceController<UserServices>
{
public ActionResult GetUser(int id)
{
var user = Service.GetUser(id);
return View(user);
}
}
public class UserServices : MyServices<User>
{
public User GetUser(int userId)
{
return Repository.Single(a=>a.Id == userId);
}
}
公共类用户控制器:MyServiceController
{
公共操作结果GetUser(int id)
{
var user=Service.GetUser(id);
返回视图(用户);
}
}
公共类UserServices:MyServices
{
公共用户GetUser(int userId)
{
返回Repository.Single(a=>a.Id==userId);
}
}
视情况而定。如果您计划将来有复杂的业务规则,我会添加服务层。如果您的站点只执行CRUD操作,而在服务层中几乎没有逻辑,那么您可以直接调用存储库层 在分层应用程序体系结构中,有一条基本规则规定,决不能绕过层。如果直接从控制器查询存储库,则违反了该规则
那又怎样?你可以说。如果服务层没有增加价值怎么办?好吧,也许将来
您可以选择打破规则,但这样它就不再是分层应用程序了。这可能也没关系-还有其他好的(甚至更好的)应用程序体系结构可用,但我认为首先您应该就总体体系结构做出决定,然后您必须坚持这个决定。否则,您将得到意大利面代码——当它是分层应用程序时,我们称之为千层面:)我不确定我是否同意您的看法。即使只有两层,它仍然是一个分层应用程序。将其视为LayerDD应用程序的最小层数是多少?决定其是否分层的不是层数,而是是否绕过违反规则的层。是的,只有两层,要从另一层绕过其中一层有点困难。