По моему мнению, «Ни то, ни другое» ... Вместо этого добавьте классы контроллеров в смесь MVVM.
Проблема с введением кода контроллера в модели представлений заключается в том, что их сложнее тестировать независимо.Во многих отношениях я вижу это так же плохо, как и код позади.
Мне кажется, что все предполагают, что у MVVM нет контроллеров, так как они исключили C. MVVM действительно является вариацией MVC ", которая просто добавляет ViewModels».
Может быть, вместо этого он должен был называться MVCVM?
ViewModels существуют только для того, чтобы разгрузить код "GUI" из представления и содержать любые данные для привязки.ViewModels не должен делать никакой обработки.Хорошим тестом является то, что ваша ViewModel тестируется с помощью автоматических модульных тестов и не зависит от источников данных и т. Д. Они не должны знать, откуда на самом деле поступают данные (или кто их отображает).
Хотя этоМожно игнорировать / избегать, контроллер должен отвечать за решение, какую модель данных отображать и в каких представлениях.ViewModel - это мост между моделями (M в MVVM) и представлениями.Это позволяет упростить «разделенную» авторизацию XAML.
Шаблон, который мы успешно используем во всех недавних проектах, заключается в регистрации только контроллеров в модулях и их инициализации при запуске.Контроллеры очень легкие / тонкие, и это единственное, что нужно, чтобы приложение не зависало на протяжении всей жизни, слушая или отправляя сообщения.В своих методах инициализации они затем регистрируют все, что им нужно (представления и модели представления и т. Д.).Этот легкий шаблон логики «только в памяти» также подходит для более тонких приложений (например, лучше для WP7).
Основные правила, которым мы следуем:
- Контроллеры принимают решения на основе событий
- Контроллеры извлекают данные и помещают их в соответствующие свойства модели представления
- Контроллеры устанавливают свойства ICommand моделей представления для перехвата событий
- Контроллеры позволяют отображать представления (если это не указано в другом месте)
- Просмотр Модели "тупые".Они содержат данные для привязки и ничего более
- Представления знают, что они отображают определенную форму данных, но не знают, откуда они берутся
Последние две точки - те, которые вам следуетникогда не ломайся, и в окно не выходит разделение проблем.