В принципе - это все о разделении обязанностей.
Больше вы их разделяете - более многословное, сложное, но понятное для понимания.
Модель:
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;}
}
Presenter (я признаю, - до сих пор не получил идею MVP полностью):
public someSpecificViewPresenter{
fizz fizz{get;set;}
foo foo{get;set;}
necessaryThingsForWhatever[] necessaryThingsForWhatever{get;set;}
public void someLogicIfNeeded(){...}
}
магии отображение object2object & уплощение, ViewModel modelmetadata конфигурации идет здесь ...
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 buzz поймал мой взгляд.
Я с тобой по этому подходу. Такие устройства, как AutoMapper, могут обрабатывать сплющивание от сложных моделей до объекта с плоским представлением. Что касается CQRS, я тоже изучаю это, и я думаю, что это делает более «естественные» объекты вида. – lasseeskildsen