У меня есть проект MVC, который примерно организован следующим образом:
- Проект 1: приложение MVC (ViewModels, Controller, Actions, UI-stuff)
- Проект 2: Модель домена (Классы доменов, поведение, доступ к данным (слой Persitance, репозитории)
Мой вопрос заключается в том, где выполнять сопоставление и доступ к данным (как организовать код).
По определение (насколько я понимаю) контроллер должен отобразить запрос в правильном представлении и быть максимально тонким.
Я использую Automapper для базового отображения, и я делаю это в контроллере, ноДля более сложного сопоставления мне проще сделать сопоставление самостоятельно.
У меня есть в основном два места для кода:
- В контроллере:
Это может легко запутаться, особенно если мне нужно получить информацию из нескольких репозиториев, создать списки выбора и т. Д.
- В ViewModel:
Это чувствует себя лучше, но я не люблюСоздание репозиториев и UnitOfWork в модели.Не знаю, принадлежат ли они там.
Сейчас я делаю что-то среднее:
Я позволяю ViewModel взять необходимые репозитории в качестве параметров конструктора, и я делаюкартирование там.Я создаю экземпляр Repositories / UnitOfWork в контроллере и передаю его. Хорошо, что я могу использовать интерфейс для репозиториев, поэтому ViewModel не нужно заботиться о реализации.
Однако в примерах в Интернете я всегда вижу весь этот код в контроллере, поэтому я задаюсь вопросом - как правильно сделать это?