В чем разница между уровнем сервиса и репозиторием? Я работал над множеством демонстрационных приложений ASP.NET MVC, и большинство из них имеют только репозитории. И у некоторых есть смесь обоих. Когда вы используете только репозитории и когда используете службы/или и то, и другое? То же самое верно для веб-приложений ASP.NET.
ASP.NET-сервис и уровни репозитория
Ответ 1
Репозитории действуют как шлюзы для хранения данных (база данных 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);
}
}
Затем в вашем действии Controller вы будете использовать службу непосредственно там, где могут применяться все ваши бизнес-правила. Таким образом, вы можете тестировать контроллеры, бизнес-правила (службы) и постоянство (хранилища) отдельно/независимо, используя mocks.
public ActionResult CreateUser(User newUser)
{
if(ModelState.IsValid)
{
_userService.Create(this.CurrentUser, newUser);
if(newUser.Id > 0)
return RedirectToAction("UserCreated");
}
return View(newUser);
}
Ответ 2
Репозиторий обычно обрабатывает только доступ к данным. Уровень обслуживания будет использовать репозиторий и применять любую дополнительную бизнес-логику. Подумайте о том, что репозиторий является повторно используемым, чем можно использовать все, что хочет получить доступ к вашим данным. В разных приложениях могут быть разные бизнес-правила (которые будут отображаться на уровне службы), но все они могут использовать один и тот же уровень внедрения репозитория
Ответ 3
Как и компендиум qntmfred, пожалуйста, ознакомьтесь со следующими ресурсами: