В основном - это все о разделении обязанностей.
Чем больше вы их разделяете, тем более многословно, сложно, но легче понять.
Модель:
public class foo{
string Name{get;set}
Bar Bar {get;set;}
string SomethingThatIsUneccessaryInViews {get;set;}
}
public class bar{
string Name {get;set;}
}
public class fizz{
string Name{get;set;}
}
Ведущий (я признаю - все еще не получил идею MVP полностью):
public someSpecificViewPresenter{
fizz fizz{get;set;}
foo foo{get;set;}
necessaryThingsForWhatever[] necessaryThingsForWhatever{get;set;}
public void someLogicIfNeeded(){...}
}
Магический объект2: отображение и выравнивание объектов, конфигурация метаданных модели представления модели здесь ...
ViewModel (NB => POCOS только с опорами контейнера. Здесь логика не должна идти).
public class fooViewModel{
string Name {get;set;}
string BarName {get;set;}
}
public class fizzViewModel{
string Name {get;set;}
}
public class someSpecificView{
fooViewModel foo {get;set;}
fizzViewModel fizz {get;set;}
whateverViewModel whatever {get;set;}
}
и здесь идет "счастливый конец" ...
<use viewdata="someSpecificView m" />
<p>
Our foo:<br/>
${Html.DisplayFor(x=>x.foo)}
</p>
<p>
Our fizz:<br/>
${Html.DisplayFor(x=>x.fizz)}
</p>
${Html.UberPaging(m.whatever.Paging)}
И да, я использую ту же модель для GET / POST. См. this для дополнительной информации почему / ifs.
Но в последнее время - я ищу другие решения. Гудение CQRS бросается в глаза.