服务层和存储库有什么区别?我已经通过很多演示ASP.NET MVC应用程序,其中大多数只有存储库。有些则混合了两者。什么时候使用存储库,什么时候使用服务或两者兼而有之? ASP.NET Web应用程序也是如此。
解决方法
存储库作为您的数据存储(sql数据库,xml文件等)的网关,而服务通常会通过一个存储库发送要保存在数据库中的数据之前对数据执行一些业务规则。
考虑这个例子:
class UserRepository : IUserRepository { public void Create(User userToCreate) { //update tracking and save to repository _userToCreate.DateCreated = DateTime.Now; _dataContext.AddNew(userToCreate); } } class UserService : IUserService { private IUserRepository _repository; public UserService(IUserRepository repository) { _repository = repository; } public void Create(User createdByUser,User userToCreate) { //implement some business rules if(!createdByUser.HasRights(UserRights.CanCreateNewUser)) throw new Exception("This user '"+createdByUser.Name+"' does not have the rights to create a new user"); //update rules auditing _userToCreate.CreatedByUserId = createdByUser.Id; //save entity to repository _repository.Create(userToCreate); } }
然后在您的控制器操作中,您将直接使用可以应用所有业务规则的服务。这样,您可以使用嘲笑单独/独立地测试控制器,业务规则(服务)和持久性(存储库)。
public ActionResult CreateUser(User newUser) { if(ModelState.IsValid) { _userService.Create(this.CurrentUser,newUser); if(newUser.Id > 0) return RedirectToAction("UserCreated"); } return View(newUser); }