ViewModel содержит только те элементы, которые требуются View.Обычно их можно рассматривать как упрощение или «уплощение» базовой модели предметной области.
Думайте о них так:
- ViewModel : этоэто данные, которые должны быть отображены в этом представлении
- Модель домена : это вся информация, которая необходима моему приложению об этом объекте для выполнения всех его функций
Например, в моем классе Заказа есть член с именем Customer, который является составной ассоциацией, то есть мой Заказ имеет Customer.В этом объекте Customer есть такие члены, как Имя, Фамилия и т. Д. Но как я могу показать это в представлении "детали" заказа или в списке заказов и клиентов, которые их разместили?
Хорошо,используя ViewModel, у меня может быть OrderListItemViewModel, который имеет член CustomerName, и я могу сопоставить комбинацию Firstname и Lastname из объекта Customer с этим.Это можно сделать вручную или, что более предпочтительно, с помощью Automapper или аналогичного.
Используя этот подход, вы можете иметь несколько ViewModels Order, специфичных для разных представлений, например, представление списка Order может отображатьимя клиента, отличное от представления сведений о заказе.
Другое преимущество ViewModels заключается в том, что вы можете сократить посторонние данные, которые не требуются для базового доменного объекта в представлении, например, если я просматриваюсписок заказов, действительно ли я хочу видеть всю контактную информацию клиента, платежные реквизиты и т. д ...?Я думаю, это зависит от цели списка, но, вероятно, нет.