Как моя модель должна выглядеть?
-
25-09-2019 - |
Вопрос
Поскольку я продвигаюсь в MVVM и MVVM-light, я узнал, что нет MVVM-Light предоставляется базовый класс для моделей.
Но из моего понимания, обмен сообщениями и повышением уведомлений также произошло в модели. По крайней мере, в связи между моделями, я бы обнаружил, что обмен сообщениями придет очень удобно.
Поэтому я только что решил вывести мою модель из ViewModelBase, хотя некоторые из свойств (например, время проектирования) будут неиспользованы.
Но чем больше я смотрю на это, тем больше я думаю, что что-то пропустил. Это считается «плохим практикой» для получения моих моделей от ViewModelBase?
И это нормально использовать обмен сообщениями для модели связи?
Решение
Выимение ваших классов смотровой модели от того, что вам нравится ... MVVM-Light предлагает ViewModelBase для обеспечения внедрения ICLEANUP - что полезно для управления жизненным циклом объектов ViewModel. Мой собственный выбор должен был реализовать все леса для уведомлений об изменении имущества в базовом классе, затем вытекают из этого для модельных классов. Об одном сильном предложении у меня есть относительные классы модели:
- Как только размер не подходит всем. Отказ Как вы храните свои данные, могут отличаться от того, как вы взаимодействуете с данными, и объекты ViewModel должны быть ориентированы на поддержку взаимодействия, а не хранения, и если вам нужно взаимодействовать с теми же данными (модель) в двух совершенно разных способах, то проектировать два Разные ViewModels для поддержки этих различных взаимодействий.
- Используйте атрибуты (A La System.comPonentModel), чтобы аннотировать модели. Вы можете получить много ваших валидационных работ, выполненных таким образом - и проверка Обратная связь Является ли ответственностью презентационного слоя (View + ViewModel), а не проблемный домен (т. Е. Модель).
Действительно хорошие классы ViewModel также обычно, как правило, достаточно без гражданства, чтобы их можно было переработано / повторно использовать в одном пользователе взаимодействия, так что большие списки данных могут быть виртуализированы (WPF поддерживает виртуализацию) для сохранения оперативной памяти.
Помните сухой (не повторяйте себя), поцелуй (держите его простым, глупым!) И ягни (тебе это не понадобится) - это принципы, которые вы должны иметь в виду над Любые академические принципы дизайна. Я с литератую потраченную впустую недели в приложении WPF, реализующий академически совершенные модели MVC / MVVM, только чтобы найти, что они затруднены формируют общую понимание готового решения. Так что ... Держите это просто! :)
Другие советы
Я бы посмотрел на EventAggregator
в Составная библиотека приложений. Отказ Ответ в это Пост имеет хорошее описание этого. Джереми Миллер сообщение идет в немного больше деталей.