Можно ли повторно использовать виртуальную машину MVVM? - PullRequest
5 голосов
/ 13 декабря 2010

Мне просто нужно простое пояснение:

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

Говорит ли MVVM, что у меня здесь должно быть две виртуальные машины, по одной для каждого конкретного представления, или мне разрешено повторное использование?ВМ, не нарушая шаблон?

В качестве дополнительного вопроса, если мне необходимо иметь две ВМ, то допустимо ли это в соответствии с шаблоном, чтобы одна была производным типом другого, или оба - производным?типы базового класса или составные классы на основе общих частей?В основном удовлетворение потребности в двух типах, но улучшение повторного использования?

Мой пример надуманный, я пытался подчеркнуть, что оба представления влияют на одни и те же два свойства модели.Максимальный размер, доступные цвета и т. Д. Одинаковы для обоих видов.

Спасибо

Ответы [ 5 ]

2 голосов
/ 15 декабря 2010

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

Мы также склонны создавать POCO изобъекты нашей базы данных, так что контекст нашей базы данных не изменяется до тех пор, пока мы действительно не захотим применить изменения (то есть шаблон MMVVVM (!), который описал Крис)

2 голосов
/ 15 декабря 2010

Хотя он и не отвечает прямо на ваш вопрос, ознакомьтесь с этим проницательным сообщением Джоша Смита о повторном использовании ViewModels и «трении», вызванном совместным использованием: http://groups.google.com/group/wpf-disciples/msg/c29b3935ec9d3c4e

Он в основном предлагает улучшениеMVVM (назовите его MMVVVM; фу!) - дополнительный MV предназначен для ModelView.Как уже упоминали другие, ViewModel является специфическим для View и повторное использование, что не очень вероятно.Вместо этого создайте обертку вокруг Model (ModelView), которую можно повторно использовать с любым ViewModel.

2 голосов
/ 13 декабря 2010

Да, виртуальная машина очень специфична для вида, и вероятность повторного использования очень мала.

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

Единственное исключение Я могу себе представить, что это дочернее представление в структуре вложенной иерархической объектной модели.

2 голосов
/ 13 декабря 2010

Вполне уместно поделиться ViewModels в этой ситуации. ViewModel - это клей, который позволяет представлению создавать представление модели. Если у вас есть два представления, которые представляют одни и те же аспекты модели, логично использовать одну и ту же модель представления.

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

2 голосов
/ 13 декабря 2010

Используйте те же методы кодирования в MVVM, которые вы используете где-либо еще. В частности, оставайтесь сухими. Так что, если вы можете использовать ту же модель представления, то сделайте это. Я бы сказал, что повторное использование модели представления крайне редко. Если позже вам придется выполнить рефакторинг в две отдельные модели представления, но вы можете использовать общий базовый класс для повторного использования общих частей и т. Д., То сделайте это.

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