Использование ViewModels до упрощение представление.
Например, у вас может быть глубокий граф объектов с продуктами, заказами, клиентами и т. Д., И некоторая информация от каждого из этих объектов требуется для конкретного представления.
ViewModel предоставляет способ агрегирования информации, необходимой для View, в один объект.
ViewModel также допускает такие вещи, как аннотации данных и валидация - что не относится к вашей модели, поскольку ваша модель должна оставаться «специфичной для домена».
Но на самом деле ViewModels - это не более чем простая обертка для ваших доменных объектов.
Используйте такой инструмент, как AutoMapper, для удобного сопоставления моделей ViewModel и моделей доменов.
Лично я всегда связываюсь с ViewModel в моих представлениях, никогда с моделями доменов, даже если это один объект. Зачем? Ну, я люблю украшать мои ViewModels UIHints, валидацией, аннотациями данных. Точно так же, как ваши доменные модели обогащаются специфичными для домена правилами и бизнес-логикой, так что ваши ViewModels должны быть обогащены специфичной для пользовательского интерфейса логикой.
Если у вас просто есть объект с 1-1 представлением модели вашего домена, вам не хватает точки ViewModels.
Добавьте только в ViewModels и не более того, что требуется для определенного View.
Пример действия контроллера
public ActionResult CustomerInfo(int customerId)
{
// Fetch the customer from the Repository.
var customer = _repository.FindById(customerId);
// Map domain to ViewModel.
var model = Mapper.Map<Customer,CustomerViewModel>(customer);
// Return strongly-typed view.
return View(model);
}