Как должна выглядеть моя модель? - PullRequest
6 голосов
/ 31 августа 2010

Когда я продолжаю копаться в MVVM и MVVM-light, я понял, что для моделей нет базового класса MVVM-light.

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

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

Но чем больше я смотрю на это, тем больше я думаю, что что-то упустил. Считается ли "плохой практикой" вывод моих моделей из ViewModelBase?

И нормально ли использовать Messaging for Model Communication?

Ответы [ 2 ]

9 голосов
/ 31 августа 2010

Извлекайте ваши классы модели представления из того, что вам нравится ... MVVM-light предлагает VieWModelBase, чтобы обеспечить реализацию ICleanUp, которая хороша для управления жизненным циклом объектов ViewModel.Мой собственный выбор заключался в том, чтобы реализовать все леса для уведомлений об изменении свойств в базовом классе, а затем использовать их для классов моделей.Единственные убедительные предложения, которые у меня есть в отношении классов моделей:

  1. Когда размер не подходит для всех .То, как вы храните свои данные, может отличаться от того, как вы взаимодействуете с данными, и объекты ViewModel должны быть ориентированы на поддержку взаимодействия, а не хранения, и если вам нужно взаимодействовать с одними и теми же данными (моделью) двумя совершенно разными способами, то разработайте дваразные ViewModel для поддержки этих различных взаимодействий.
  2. Используйте атрибуты (как System.ComponentModel) для аннотирования моделей.Вы можете выполнить большую часть своей работы по проверке таким образом - и проверка обратная связь является ответственностью уровня представления (View + ViewModel), а не проблемной области (то есть Модель).

Действительно хорошие классы ViewModel также обычно не имеют состояния, чтобы их можно было повторно использовать / повторно использовать в рамках одного взаимодействия с пользователем, так что большие списки данных можно виртуализировать (WPF поддерживает виртуализацию) для экономии оперативной памяти.

Помните, СУХОЙ (не повторяйте себя), ПОЦЕЛУЙ (будь проще, глупый!) И ЯГНИ (Тебе это не понадобится) - вот принципы, которые ты должен помнить выше любые принципы академического дизайна.Я буквально потратил впустую недели на приложение WPF, реализующее академически совершенные шаблоны MVC / MVVM, только чтобы обнаружить, что они отвлекают от общей понятности готового решения.Так что ... будь проще!:)

2 голосов
/ 31 августа 2010

Я бы взглянул на EventAggregator в библиотеке составных приложений .Ответ в этом посте имеет хорошее описание.Пост Джереми Миллера раскрывает некоторые подробности.

...