Bre*_*ogt 26 asp.net asp.net-mvc repository asp.net-mvc-3
服务层和存储库之间有什么区别?我已经完成了很多演示ASP.NET MVC应用程序,其中大部分只有存储库.有些人混合了两者.什么时候只使用存储库,何时使用服务/或两者兼而有之?ASP.NET Web应用程序也是如此.
Taw*_*ani 31
存储库充当数据存储(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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后,在您的Controller操作中,您将直接使用该服务,其中可以应用所有业务规则.这样,您可以使用模拟单独/独立地测试控制器,业务规则(服务)和持久性(存储库).
public ActionResult CreateUser(User newUser)
{
if(ModelState.IsValid)
{
_userService.Create(this.CurrentUser, newUser);
if(newUser.Id > 0)
return RedirectToAction("UserCreated");
}
return View(newUser);
}
Run Code Online (Sandbox Code Playgroud)
ken*_*ner 13
存储库通常仅处理数据访问.服务层将使用存储库,并应用任何其他业务逻辑.将存储库视为可重用的层,而不是任何想要访问数据的层.不同的应用程序可能具有不同的业务规则(将在服务层中),但是都可以使用相同的存储库层实现
| 归档时间: |
|
| 查看次数: |
7839 次 |
| 最近记录: |