Вы бы создали модель представления, если бы она была такой же, как на других страницах? - PullRequest
1 голос
/ 30 мая 2011

Благодаря предыдущим ответам, я уже написал View Models, и мне действительно нравится эта концепция, однако в приложении есть моменты, когда View View будет точно такой же, как (Не уверен в термине ..) реальной модели..

Теперь, в этой ситуации, я понимаю, что модель представления лучше всего, поскольку однажды я могу изменить логику приложения и сделать приложение более устойчивым.

Однако ситуация, которую яСейчас у меня есть несколько страниц, которые очень тесно связаны друг с другом, и всем нужна одна и та же модель.В этой ситуации вы бы использовали одну и ту же модель представления или просто создали бы отдельный идентичный для каждой страницы?

Ответы [ 3 ]

2 голосов
/ 30 мая 2011

Они точно такие же? На мой взгляд, если они точно такие же, вы должны повторно использовать ViewModel. Зачем создавать одни и те же модели представления дважды, функциональность которых в основном одинакова. Однако вы должны быть осторожны, чтобы в конструкторе ViewModel не было вызовов службы, поскольку для всех представлений вам могут не понадобиться одни и те же вызовы службы. В этом случае ваши звонки будут потрачены впустую, даже если вам это не нужно. В таком случае сделайте публичный метод во ViewModel как:

public void DoServiceCallsForViewA()
{
    ModelObj.FooA();    
}

public void DoServiceCallsForViewB()
{
    //your calls for view B 
    ModelObj.FooB();
}

Тогда, по вашему мнению, вы можете ввести DataContext,

((YourViewModelName)DataContext).DoServiceCallsForViewA();

и вы можете написать:

((YourViewModelName)DataContext).DoServiceCallsForViewB();
0 голосов
/ 30 мая 2011

На мой взгляд, каждый экземпляр вашей Модели должен иметь связанную ViewModel. То есть, вы должны иметь отношения 1: 1 между моделями и моделями представления. Однако вы можете привязать несколько видов к одной и той же модели представления.

Скажем, например, у вас есть объект Person и PersonViewModel, а затем два разных представления, относящихся к этому Person, например, PersonEditView и PersonDetailsView. Вы должны поместить все необходимые свойства для PersonEditView и PersonDetailsView в PersonViewModel. Затем используйте DataTemplateSelector, чтобы выбрать, какой вид должен отображаться для модели представления, в какое время.

Каждый экземпляр ViewModel должен быть представителем для одного экземпляра модели, и он должен быть единственным представителем для этого экземпляра модели.

0 голосов
/ 30 мая 2011

ViewModels должен быть простым средством передачи данных между представлениями и действиями контроллера (просто список свойств).Если это простые списки свойств в вашем приложении, вы можете использовать Automapper , чтобы сделать ваше окончательное решение по этой мелкой детали менее важным.

... чтобы не уклоняться от вопроса, я бы придерживалсяс одним определением ViewModel, в то время как представления требуют точно одного и того же шаттла данных и будут готовы создать новую ViewModel, когда одному из этих представлений нужно что-то немного отличающееся.

Нет необходимостидублировать, кроме как для того, чтобы сделать ваш взгляд: сопоставление действий очевидно, но взвешивание очевидного сопоставления с нарушением принципа СУХОЙ кажется простым решением ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...