MVVM, я должен поместить логику в модель или view-модель (контроллер) - PullRequest
2 голосов
/ 17 октября 2011

Я новичок в MVVM и сейчас занимаюсь рефакторингом MVVM в проекте silverlight, предположим, что это приложение для покупки книг.

Вид - это список книг, я привязываю название книг к ViewModel.Итак, у меня есть public string Title { get; set; } во ViewModel, также public string Title { get; set; } в модели (я прав?)

Теперь я хочу поместить обработчик событий, чтобы обновить заголовок книги, должен ли я поместить обработчик событий в ViewModelили модель?и для чего используется Модель?

Ответы [ 2 ]

7 голосов
/ 17 октября 2011

По моему мнению, «Ни то, ни другое» ... Вместо этого добавьте классы контроллеров в смесь MVVM.

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

Мне кажется, что все предполагают, что у MVVM нет контроллеров, так как они исключили C. MVVM действительно является вариацией MVC ", которая просто добавляет ViewModels».

Может быть, вместо этого он должен был называться MVCVM?

ViewModels существуют только для того, чтобы разгрузить код "GUI" из представления и содержать любые данные для привязки.ViewModels не должен делать никакой обработки.Хорошим тестом является то, что ваша ViewModel тестируется с помощью автоматических модульных тестов и не зависит от источников данных и т. Д. Они не должны знать, откуда на самом деле поступают данные (или кто их отображает).

Хотя этоМожно игнорировать / избегать, контроллер должен отвечать за решение, какую модель данных отображать и в каких представлениях.ViewModel - это мост между моделями (M в MVVM) и представлениями.Это позволяет упростить «разделенную» авторизацию XAML.

Шаблон, который мы успешно используем во всех недавних проектах, заключается в регистрации только контроллеров в модулях и их инициализации при запуске.Контроллеры очень легкие / тонкие, и это единственное, что нужно, чтобы приложение не зависало на протяжении всей жизни, слушая или отправляя сообщения.В своих методах инициализации они затем регистрируют все, что им нужно (представления и модели представления и т. Д.).Этот легкий шаблон логики «только в памяти» также подходит для более тонких приложений (например, лучше для WP7).

Основные правила, которым мы следуем:

  • Контроллеры принимают решения на основе событий
  • Контроллеры извлекают данные и помещают их в соответствующие свойства модели представления
  • Контроллеры устанавливают свойства ICommand моделей представления для перехвата событий
  • Контроллеры позволяют отображать представления (если это не указано в другом месте)
  • Просмотр Модели "тупые".Они содержат данные для привязки и ничего более
  • Представления знают, что они отображают определенную форму данных, но не знают, откуда они берутся

Последние две точки - те, которые вам следуетникогда не ломайся, и в окно не выходит разделение проблем.

2 голосов
/ 17 октября 2011

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

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

Если обработчик события относится к представлению, то он относится к модели представления. Вы можете попробовать использовать шаблон команд (см. Пример пользовательского шаблона команд WPF ), если он соответствует вашим целям.

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