Подтвердить что ты не робот

ASP.NET-сервис и уровни репозитория

В чем разница между уровнем сервиса и репозиторием? Я работал над множеством демонстрационных приложений ASP.NET MVC, и большинство из них имеют только репозитории. И у некоторых есть смесь обоих. Когда вы используете только репозитории и когда используете службы/или и то, и другое? То же самое верно для веб-приложений ASP.NET.

4b9b3361

Ответ 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

Репозиторий обычно обрабатывает только доступ к данным. Уровень обслуживания будет использовать репозиторий и применять любую дополнительную бизнес-логику. Подумайте о том, что репозиторий является повторно используемым, чем можно использовать все, что хочет получить доступ к вашим данным. В разных приложениях могут быть разные бизнес-правила (которые будут отображаться на уровне службы), но все они могут использовать один и тот же уровень внедрения репозитория