加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

ASP.NET服务与存储库层

发布时间:2020-12-15 18:48:58 所属栏目:asp.Net 来源:网络整理
导读:服务层和存储库有什么区别?我已经通过很多演示ASP.NET MVC应用程序,其中大多数只有存储库。有些则混合了两者。什么时候使用存储库,什么时候使用服务或两者兼而有之? ASP.NET Web应用程序也是如此。 解决方法 存储库作为您的数据存储(sql数据库,xml文件
服务层和存储库有什么区别?我已经通过很多演示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);
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读