ASP.NET服务与存储库层

服务层和存储库有什么区别?我已经通过很多演示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);
    }

相关文章

### 创建一个gRPC服务项目(grpc服务端)和一个 webapi项目(...
一、SiganlR 使用的协议类型 1.websocket即时通讯协议 2.Ser...
.Net 6 WebApi 项目 在Linux系统上 打包成Docker镜像,发布为...
一、 PD简介PowerDesigner 是一个集所有现代建模技术于一身的...
一、存储过程 存储过程就像数据库中运行的方法(函数) 优点:...
一、Ueditor的下载 1、百度编辑器下载地址:http://ueditor....