Когда использовать Model а когда ViewModel в ASP MVC?

Сабж.
Для примера, есть у меня модель User, в представлении мне нужно вывести инфу о юзере, и этой модели мне хватит.
Но мб правильно будет все таки создать UserViewModel и использовать ее?


Ответы (1 шт):

Автор решения: Aziz Umarov

ViewModel создаётся для View. Если вьюшка у вас UpdateUserView то логично создать для нее UpdateUserViewModel, если UserInfoView то UserInfoViewModel, а Model это DTO (Data Transfer Object) для базы данных, я так понимаю у Вас. UpdateUserViewModel в общем случае не обязан совпадать с UserInfoViewModel, поскольку для представления Update могут понадобиться также списки (Country, Gender,..) и вовсе не нужны в UserInfoViewModel. Это и создаёт у вас проблемы в понимании MVC. ViewModel может компоноваться из нескольких DTO и содержать поля необходимые для конкретной View. Это все и контролируется контроллером.

Upd. Конечно порой возникает желание использовать использовать User в качестве ViewModel и не использовать конкретную. Но тогда добавляя либо изменяя User нужно будет заботиться о местах где User использовался в чистом виде, что может порождать проблемы в будущем. Как пример добавить поля login password могут непреднамеренно опубликовать приватные данные.

→ Ссылка