Я новичок во всей этой концепции дизайна, и, читая за последние несколько недель, я собрал много информации, но она кажется разрозненной и противоречивой. Термины смешанные, и мне просто трудно обдумать это.
Шаблон, который я использую, подобен этому и предполагает следующий поток:
Приложение MVC
Контроллер(ы) обрабатывают запрос/ответ от клиента для данного представления. Внутри методов действий контроллеров они связываются со службами (Service Layer) и либо запрашивают объекты для построения моделей представления, либо отправляют объекты из моделей представления обратно.
Модели представлений
Я использую строго типизированные модели представлений в представлениях и из них.
Являются ли модели представлений DTO? Должны ли они содержать только простые свойства, такие как Имя, AddressLine1, Address City и т. д., или они должны содержать сложные свойства, несколько объектов и т. д.
Проверка в модели представления. Если это так, это будет проверка, например, обязательные поля, длина поля и т. д. Тогда проверка, например, имя пользователя уже существует, или где вам нужно будет взаимодействовать с другими объектами на уровне службы?
Могут ли модели представления содержать только классы POCO, возвращенные из EF, или мне следует использовать AutoMapper?
Если вы используете AutoMapper и DTO, являются ли DTO клонами классов POCO?
Будете ли вы отображать в контроллере, модели представления или в сервисном слое ниже?
Службы
Для меня службы — это объекты, которые обращаются к репозиторию (репозиториям) для получения объектов POCO из EF. Вот где вся моя бизнес-логика. Как только служба возвращает объект в репозиторий для сохранения в EF, они считаются действительными объектами. Это правильно?
Репозитории
В них нет бизнес-логики, они просто используются для переноса объектов между сервисами и EF. Это правильно? Я реализую интерфейсы здесь с общим репозиторием. Тогда вы могли бы расширить общий репозиторий для особых нужд?
Вопросы по терминологии
1) Равен ли бизнес-объект объекту предметной области? Сколько логики должен содержать объект предметной области?
2) Является ли модель предметной области моделью EF? Я использую подход Model-First.
3) Внедрение зависимостей. Должен ли я использовать это? Я понимаю, как это работает, просто не получаю реальной пользы. Я играл с Ninject.
Я думаю, что сообществу будет полезна какая-то вики, содержащая все лучшие практики с примерами кода. Есть ли что-то подобное? Многие примеры очень просты, и многие образцы Microsoft не используют этот шаблон, даже если заявляют об этом.
Заранее спасибо всем, кто поможет и поможет мне в этом.
Кстати, я думаю, что StackOverflow нужна небольшая кнопка «Купить мне пиво» рядом с флажком «Принять ответ» :)