View и ViewModel лучшие практики - PullRequest
0 голосов
/ 02 июня 2018

У меня есть сомнения по поводу того, должен ли каждое представление иметь свою собственную ViewModel, или я должен пройти простую модель, где нет необходимости в ViewModel (что меня беспокоит, если я начну смешивать эти две концепции, то позже я получу джунгли)?

Я пытался гуглить, но никто не говорил об этом, в каждом посте, который я запускаю, они просто объясняют цель ViewModel, и я знаю, что основная цель ViewModel состоит в том, чтобы вы могли передавать несколько моделей для просмотра.

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Есть несколько причин, чтобы выбрать ViewModel вместо DomainModel.

1) Прежде всего, безопасность.Представьте, что у вас есть вид для смены пароля.Если вы передаете модель домена для просмотра.возможно, вы открываете множество свойств, которые не нужны, и это может вызвать проблемы с безопасностью.Нет причины выставлять такие свойства, как LastLoginDate, IsActive, IsEnabled, NumberOfFailedLogin и т. Д., Просто меняя пароль.

2) Вторая причина - уменьшение логики в представлении.Если вы передаете класс Domain в представление, возможно, вам нужно добавить дополнительную логику для сокрытия дополнительных свойств или придать ей нужную форму или добавить логику на основе маршрута и т. Д.

3) Из-за архитектуры,Предоставление модели предметной области представлению вызывает тесную связь между уровнем представления и моделью предметной области, что совсем нехорошо.

0 голосов
/ 02 июня 2018

Это зависит.

Во многих случаях использования главная цель не состоит в том, чтобы выставлять поля для привязки при отправке формы, которые пользователь не должен иметь возможности обновлять.Я не стал бы рабски создавать их, когда они не нужны, но это зависит от разработчиков и их уровня понимания того, когда и почему вы используете viewmodels против моделей domain / ef.Также имеет значение базовый размер кода приложения.

Возможно, вам нужны списки выбора, может быть, вы хотите преобразовать некоторые свойства в разные типы.Множество причин их использовать.Однако это больше кода и кода сопоставления, даже если вы используете такой инструмент, как AutoMapper.Таким образом, они тратят время на внедрение, но, может быть, они решают проблемы и экономят время?Может быть, они решают проблему безопасности?Может быть, делать их все как модели представления помогает юниорам понять?Может быть, вы предпочли бы выполнить настройку модели представления при запуске, чем преобразовывать код позже, когда это действительно необходимо?

Согласованность может помочь, но выполнение дополнительной работы может не стоить.Лучшая практика для меня не лучшая практика для вас.

Учитывайте затраты и выгоды для вашего проекта и команды.Например, возможно, ваш проект является внутренним, и никто не собирается пытаться взломать его путем добавления данных в отправку

...