Шаблон MVVM аналогичен любому другому шаблону MVx (MVC, MVP, ...) в том, что он поощряет разделение интересов (SoC), что, в свою очередь, повышает удобство сопровождения / тестируемости вашего кода. Помимо обычного SoC, MVVM дает следующее:
- Модульное тестирование вашей логики взгляда; это потому, что вы перемещаете логику из своего представления в модель представления, делая свое представление настолько тупым, насколько это возможно.
- Рабочий процесс разработчика-дизайнера; поскольку представление «тупое», с XAML легче работать без логики.
Что касается видимости, то есть того, что видимо для чего, то оно строго следующее:
Model <= ViewModel <= View
Другими словами, ViewModel может видеть Модель, но Модель не может видеть ViewModel. Аналогично, View может видеть ViewModel, но не наоборот.
Поскольку ViewModel не имеет ссылки на View, он позволяет вашему коду выполняться без присутствия каких-либо компонентов представления, это разрешает (1) выше.
Цель вашей ViewModel - «придать форму» вашей модели, чтобы упростить привязку к представлению. Если ваш вид прост, тогда вполне допустимо сделать следующее:
Model <= View
Это все еще позволяет (1) модульное тестирование, (2) рабочий процесс разработчика-дизайнера.
Также хорошо использовать гибридный подход, иногда предоставляя вашу модель вашему представлению, а иногда оборачивая ее в ViewModel. Например:
http://www.scottlogic.co.uk/blog/colin/2009/08/the-mini-viewmodel-pattern/
Пожалуйста, не создавайте связку кода ViewModel, только потому, что вы думаете, что должны!