Я использую рамки MVC в течение короткого времени, и мне очень нравится, как проблемы отделяются. У меня есть плохая привычка позволять контроллерам выполнять немного работы. Поэтому я действительно ищу совет.Сервисные слои и репозитории
Когда я впервые начал использовать MVC, я довольно часто делал манипуляции с контроллерами на моделях после выполнения работы с базой данных. Я знал, что это так плохо, что они работают в моделях. Однако я не доволен этим, так как хочу, чтобы мои модели очень учились.
Я проделал немного чтения, и я вижу, что люди держат свои контроллеры и модели навязчивыми, имея сервисный слой, который мне нравится.
Я просто пытаюсь понять, как сервисный уровень и репозиторий должны работать вместе. Вот мои предположения, можете ли вы сообщить мне, если это хороший способ работы?
- Контроллер может вызвать хранилищу напрямую, если не требуется никаких манипуляций быть сделано на основе данных и в качестве такого слоя сервиса не нужно ввязываться
- После того, как должно быть сделано для данных любой работы (бизнес-логику), то это должно быть сделано на уровне обслуживания, и контроллер выполнит простой вызов уровня обслуживания по мере необходимости
- После того, как служба выполнила свою бизнес-логику, она затем будет использовать репозиторий по мере необходимости (если данные необходимы сохраняются).
- Модели идеально должны быть плоскими, идеально действующими как не более чем DTOs
- Проверка данных будет выполнена в рамках моделей (с использованием атрибутов проверки MonoRail). Я признателен, что даже никто не любит загрязнять свои модели множеством атрибутов, но это другое обсуждение. Мне нравится преимущество атрибутов проверки MonoRail для автоматической проверки jQuery в пользовательском интерфейсе.
Я пытаюсь превратить весь свой код в принцип единой ответственности, поэтому пытаясь разобраться в моих методах кодирования.
Благодаря
Моя единственная проблема с внедрением бизнес-логики в модели заключается в том, что при передаче коллекций моделей в пользовательский интерфейс через PropertyBag (или, тем не менее,) вы потенциально открываете бизнес-логику для пользовательского интерфейса. –
Я согласен с вашими комментариями, я просто чувствую, что чрезмерное количество бизнес-логики должно храниться на отдельном уровне обслуживания. Постарайтесь, чтобы ваши модели, виды и контроллеры были как можно меньше – StevenMcD