Должен ли контроллер когда-либо понадобиться напрямую обращаться к репозиторию или он должен всегда выполняться через уровень обслуживания? Или есть другие варианты?ASP.NET MVC - репозиторий/служба/контроллер
ответ
Если у вас есть сервисный уровень, и вы используете его таким образом, чтобы абстрагировать бизнес-логику вдали от хранилища (как и в случае с уровнем обслуживания), тогда нет, ваши контроллеры должны делать только вызовы службы методы. Тогда сервисный уровень будет связывать с репо.
В ответ на вопрос Майо: модель представляет собой классы данных, которые будут передаваться по всему приложению (репо, служба и пользовательский интерфейс/контроллеры), поэтому слой интерфейса/сети должен «работать» с ними, как и другие слои.
Я думаю, если вы реализуете слой услуг в контексте Fowler's definition и modern aspnet mvcadaptions, то вы должны иметь ваши действия контроллер выполнен в виде очень мелких и легких способов, называя «мясистые» бизнес-логику от вашего уровня обслуживания.
EDIT: Я думаю, я не был ясен: я не говорю, имея слой сервиса является единственным вариантом, просто пытаясь ответить на часть вопроса, относящийся к случаю, когда вы сделать использования сервисный уровень. Согласованный уровень обслуживания не всегда необходим, особенно для небольших проектов.
Все примеры, с которыми я работал, похоже, предполагают, что контроллер должен работать с моделью.
Тем не менее, я слышал, что некоторые авторы предполагают, что модель состоит из всего: от бизнес-логики до хранилища данных (в отличие от классов бизнес-объектов, которые многие считают моделью).
Лично я старался держать его в чистоте/согласованности, если контроллер работает с классами, которые работают против репозитория, но я не думаю, что против него существует жесткое/быстрое правило.
Комментарий к тому, почему вам не нравится ответ, ребята ... иначе никто не узнает. :) – Mayo
Он говорит +1 не -1? Хотя это не я, кто сделал голосование, ответ действительно не помогает. В шаблоне Repository/Service модель не является моделью Repository/Service. Я бы хотел просто работать с сервисом, но я не уверен, что это приведет к чрезмерному дублированию кода. – LiamB
Я вижу ... тогда это может объяснить -1. Я просто предположил, что вы называете это другой терминологией - не совсем другая концепция. Дает мне кое-что для исследования сегодня (медленный рабочий день). – Mayo
Контроллер интерпретирует ввод пользователя и подготавливает модели для использования View, поскольку я пришел к пониманию этого. Некоторые люди очень серьезно относятся к тому, чтобы удалять каждый бит логики с моделей, но я не настолько анал об этом.
Лучший вариант IMHO - использовать DI для доступа к вашему репозиторию из контроллера.
Предполагаю, вы мэн? «каждый бит логики от контроллера», – LiamB
Ум, нет, каждый бит логики от моделей. Модели НИЧЕГО, но хранят данные, собранные CONTROLLER в ответ на ввод/запрос пользователя. – Will
Это была бы «анемичная модель», и большинство людей не считалось очень хорошей практикой: http://en.wikipedia.org/wiki/Anemic_Domain_Model – UpTheCreek
Сервисный уровень - это в основном api для вашей бизнес-логики/бизнес-модели. Например, у вас может быть какой-то метод, который получает ваш «лучший клиент». Затем сервисный уровень делает то, что ему нужно сделать, чтобы запросить репозиторий, выполнить любую логику, необходимую ему и т. Д., И вернуть клиента. В таких случаях вы всегда должны пройти через сервисный уровень.
Иногда, хотя вы просто извлекаете объект, который может быть в вашей модели просмотра, но не в бизнес-модели. Конечно, вы могли бы добавить обертку вокруг репозитория на уровне сервиса, но тогда вы рискуете запутать свой уровень обслуживания и заполнить его бессмысленными вещами. В таких случаях я не вижу вреда в том, чтобы идти прямо в репозиторий.
Вам не всегда нужен сервисный уровень - в простых ситуациях он просто над инженерным решением. Это нормально для контроллера, чтобы вызвать репозиторий. Но, если вы видите, что ваши контроллеры раздуваются с логикой или вы повторяетесь в действиях контроллера, посмотрите на посылку службы между контроллером и репозиторием и переместите некоторую логику с контроллера на сервисный уровень.
Я согласен с @Sosh об инженерной точке. Но я нашел одно большое преимущество от того, что контроллер прошел через службу, когда пришло время повторно использовать эту услугу через провод через SOAP/REST, ваша работа по рефактору очень минимальна. Имейте в виду, что это нарушает YAGNI, и он думает заранее (в некоторой степени).
Но опять же - после прочтения последней книги Джеффри Палермо - MVC In Action, у него есть контроллер с нулевым логическим разговором с репозиторием напрямую, и он работает отлично.
Да, хорошо о веб-сервисах. – UpTheCreek
- 1. ASP.Net VS ASP.Net MVC
- 2. ASP.NET MVC без ASP.NET?
- 3. asp.net MVC
- 4. Asp.NET MVC - MVC или MVP?
- 5. ASP.NET MVC vs Winforms MVC
- 6. asp.net mvc: disable mvc form
- 7. Spring MVC vs ASP.NET (MVC?)
- 8. ASP.NET MVC vs Spring MVC
- 9. ASP.Net MVC vs ASP.Net Forms
- 10. ASP.NET MVP vs ASP.NET MVC
- 11. ASP.NET MVC vs. ASP.NET 4.0
- 12. ASP.NET 4.0 vs ASP.NET MVC
- 13. ASP.NET MVC 4 разбивает ASP.NET MVC 3 проекта
- 14. Как использовать решение ASP.NET MVC в отдельных проектах ASP.NET MVC
- 15. ASP.NET MVC и Angularjs vs ASP.NET MVC и Reactjs
- 16. Отладка ASP.NET MVC-сайта и ASP.NET MVC Исходный код
- 17. ASP.NET MVC: Как обновить ASP.NET MVC сайта на производстве
- 18. Разница между Asp.net MVC 1 и Asp.net MVC 2
- 19. Как запустить проект ASP.NET MVC внутри другого проекта ASP.NET MVC
- 20. публикация ASP.net MVC-формы с виджетами Kendoui для ASP.net MVC
- 21. ASP.NET MVC JQuery - гибкий алгоритм для вызова методов asp.net mvc
- 22. Преобразование asp.net метод MVC WebAPI в ASP.NET MVC методу
- 23. NHibernate с ASP.NET MVC
- 24. asp.net mvc querystring param
- 25. развертывание ASP.NET MVC (бритва)
- 26. ASP.NET MVC - Статические объекты
- 27. overriding Метод asp.net mvc
- 28. ASP.net Просмотр каталога MVC
- 29. Локализация ASP.NET MVC
- 30. asp.net mvc master detail
+1 для служебного слоя ссылки – Mayo