Модель обзора редко должна быть просто набором классов домена. Прежде всего, помещение классов домена в модель просмотра является большой темой; многие думают, что вы не должны этого делать. Вашему представлению, вероятно, не нужен полный экземпляр пользователя, а только имя. Если вы сохраняете полный экземпляр пользователя в модели представления, он скрывает намерение реальной модели представления, затрудняет повторное использование и т. Д. Вы, возможно, лучше иметь строковое свойство UserName, которое правильно форматирует имя, вместо того, чтобы обращаться к свойствам пользователя в представлении и форматировать его там.
Это теория и никто не имеет имеет, чтобы следить за ней; но хорошо держать в памяти и пытаться добиться.
Во-вторых, ваши модели просмотра не должны быть просто наборами классов домена, поскольку они должны обеспечивать семантику представления - например, атрибуты проверки и дополнительную логику представления. У вас могут быть агрегированные свойства, которые предоставляют данные списков, форматирование и т. Д. Другой пример: модели представлений POST могут иметь методы для преобразования данных необработанной формы в сущности.
Вы должны перенести некоторую логику представления из представлений и/или контроллеров в модели просмотра - форматирование, свойства, которые нужны только представлениям и т. Д. Контроллер не должен преобразовывать коллекцию объектов в коллекцию данных модели просмотра - это должно выглядеть модель просмотра. Просмотр не должен преобразовывать формат пользователя в одно имя и адресную строку - модель просмотра должна.
Поступая таким образом, вы не устанете делать классы класса «вид», потому что они больше не будут глупыми, и ваша работа не будет дампом и/или повторением. Классы модели представления будут столь же важны, как и другие классы в вашем приложении.
Я согласен со всем, что вы сказали. Но иногда вам нужно передавать такие вещи, как целые массивы, где использование ViewData будет очень неудобным.И здесь вам не нужны слои абстракции. – Alex
В моем проекте сейчас 150 просмотров, и иногда я пропускаю один объект (массив, сущность и т. Д.), Но когда представление становится более сложным, я всегда создаю модель представления и никогда не испытываю никаких проблем с ней. Это не «лучшая практика», а хороший баланс между хорошим и простым. Если у меня есть много «клиентов» для представления, я всегда создаю модель представления на первом месте; если представление должно делать слишком много форматирования от сущности к строкам, я создаю модель представления. У меня почти нет моделей просмотра, которые представляют собой не что иное, как кучу свойств. – queen3