Это отличный вопрос, для которого я не думаю, что есть хороший ответ, который идет в комплекте с паттерном MVC.
ViewModels отлично работают, когда у модели, к которой они отображаются, нет дочерних.
Но когда у модели есть дети, как в
Клиент
-->Order
-->Country
(вообразив, что Страна была дочерним объектом Заказчика), шаблон дизайна как бы ломается.
Лучшее, что я нашел, - это использовать наследование и выборочно выставлять
Только те дети, для которых вам нужна viewmodel логика. В противном случае просто доступ
свойства модели представления, которое войдет через наследование.
открытый класс CustomerView: Customer // наследуется от Customer (модель)
{
public CustomerView(Customer customer)
{
this.FirstName = customer.FirstName
//etc..
//Only if you need it, that is if you have some display-specific
//logic relating to country for a given view, you create
//a CountryView class that inherits from Country and gets populated
//by an instance of it as well
this.CountryView = new CountryView(customer.Country)
}
public CountryView CountryView {get;set;} //sadly you cannot override Country but you may be able to shadow it.
public string DisplayColor
{
if(base.FirstName == "Joe")
{
return "red";
}
return "";
}
}
Это становится грязно, когда имеешь дело с внуками. Если у кого-то есть лучшее решение, я бы с удовольствием его услышал.
Спасибо