В чем разница между уровнем сервиса и репозиторием? Я работал над множеством демонстрационных приложений ASP.NET MVC, и большинство из них имеют только репозитории. И у некоторых есть смесь обоих. Когда вы используете только репозитории и когда используете службы/или и то, и другое? То же самое верно для веб-приложений ASP.NET.ASP.NET service vs repository layers
ответ
хранилища действуют точно так же, как шлюзы для вашего хранения данных (база данных 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);
}
}
Затем в действие контроллера вы будете использовать службу непосредственно там, где все ваши бизнес-правила могут быть применены. Таким образом, вы можете тестировать контроллеры, бизнес-правила (службы) и настойчивость (репозитории) отдельно/независимо, используя mocks.
public ActionResult CreateUser(User newUser)
{
if(ModelState.IsValid)
{
_userService.Create(this.CurrentUser, newUser);
if(newUser.Id > 0)
return RedirectToAction("UserCreated");
}
return View(newUser);
}
Репозиторий обычно обрабатывает только доступ к данным. Уровень обслуживания будет использовать репозиторий и применять любую дополнительную бизнес-логику. Подумайте о том, что репозиторий является повторно используемым, чем можно использовать все, что хочет получить доступ к вашим данным. Различные приложения могут иметь различные бизнес-правила (которые идут бы в слое службы), но все могли использовать то же хранилище слой implmentation
Подобно тому, как компендиум для qntmfred ответа, пожалуйста, обратите внимание на следующие ресурсы:
- 1. cocos2d scenes vs layers
- 2. Улучшение Asp.net MVC Layers Архитектура
- 3. UnderStanding @Controller @Service @Repository
- 4. Spring @Repository и @Service
- 5. WCF Service vs ASP.NET Web Api
- 6. Приложение WCF Service VS ASP.NET Web Application?
- 7. fflush, fsync и sync vs memory layers
- 8. Restful Web Service Repository неправильно маршрутизируется
- 9. Micro Service vs Nano Service?
- 10. Entity vs Repository (какая разница)
- 11. SVN Client vs Repository Browser
- 12. git local vs remote repository
- 13. Приложение vs Service vs Intent
- 14. Laravel: Service/Repository Шаблон и код дублирования
- 15. .NET Service Repository Manager для SOA
- 16. Современный шаблон ORM vs Repository/IoW
- 17. RestFuse vs Rest Assured vs MockMVC Framework Service Service Framework
- 18. Spring Jpa Service вызывает vs Jpa query
- 19. SqlClient vs web-service ...?
- 20. LocationServices PendingIntent vs Service
- 21. Понимание IIS vs Service
- 22. HttpContext.Items vs Scoped Service
- 23. Angular2 SharedModule vs Service
- 24. Транзакция: контроллер vs service
- 25. IIS vs Windows Service?
- 26. Android-обработчик vs service
- 27. AngularJS: controller vs service
- 28. Azure App Service vs Azure Service Fabric
- 29. WCF Layers
- 30. Asp.net Identity DbContext/Repository Issue
Куда вы размещаете ваши репозитории и услуги? Какова ваша структура проекта? У меня есть MyProject.BusinessObjects и MyProject.DataObjects. В настоящее время у меня есть мои репозитории в MyProject.BusinessObjects. – 2010-12-06 15:53:43
Мне нравится разместить мою модель домена (например, инфраструктуру сущности edmx) и классы репозитория в отдельном проекте MyProject.Data. Обычно мои службы живут в проекте MVC Web App в папке/Services (но я бы не стал считать, что наилучшая практика - только личное предпочтение) – kenwarner 2010-12-06 15:56:34