Сопоставление реализаций с частями шаблона

Пытаясь понять шаблон MVVM, я наткнулся на это видео, ссылка на который размещена на веб-сайте MVVM Light Toolkit.

В TechDays 2010 - Лоран Бугнион заявляет, что оба WPF / Silverlight используют шаблон MVVM для своей структуры. Может кто-нибудь пояснить, какие компоненты в WPF / SL (какие конкретно названы в Bugnion и перечислены ниже) являются Model, ViewModel и View?

Он заявил, что эти три элемента являются частью шаблона MVVM:

  1. Код
  2. Свойства зависимости
  3. Шаблоны управления (Шаблоны данных?)

person SliverNinja - MSFT    schedule 16.12.2011    source источник


Ответы (4)


Я первый, кто признает, что это немного растянуто;) но позвольте мне уточнить. Заявление было сделано, чтобы проиллюстрировать, что MVVM - очень естественный шаблон в SL / WPF (и во всех других фреймворках, использующих XAML и привязку данных). В этом примере я говорил о разделении проблем между кодом элемента управления (не имея в виду «код» в целом, а конкретно - кода элемента управления, например, класса Button) и его шаблона. На этом рисунке код действует как ViewModel, то есть управляет представлением. Шаблон более очевиден - View. Связующим звеном между ними является привязка данных, которая активируется через свойства зависимостей.

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

Оглядываясь назад, я полагаю, что мог бы быть более ясным, и зашел слишком далеко в этой аналогии. Я предполагаю, что основной момент, который я хотел бы, чтобы вы вынесли из этого, заключается в следующем: в SL / WPF код и представление слабо связаны посредством привязки данных. Это верно для базовых элементов управления, и вы также можете структурировать свое приложение слабосвязанным образом с помощью привязок данных.

Надеюсь, теперь в этом есть больше смысла;)

Ура, Лоран

person LBugnion    schedule 17.12.2011
comment
Приятно, что вы заглянули, уточнить и задать вопрос таким образом - person Emond Erno; 20.12.2011

Я не смотрел видео. Определенно шаблоны элементов управления и шаблоны данных - это ваши представления. Свойства зависимостей на самом деле также являются частью вашего представления, но могут быть привязаны к данным в классе, который служит моделью для представления, то есть модели представления. «Код», о котором он говорит, должен быть бизнес-логикой, которая является вашей моделью.

Я бы подумал об этом как о трех объектах. У вас есть объект представления, например элемент управления TextBox, к которому применен стиль в форме других объектов представления, составляющих шаблоны. TextBox также имеет свойства зависимостей, которые представляют собой объекты, которые могут связывать (синхронизировать) значение TextBox со значением другого объекта. Этот объект является DataContext TextBox, который является объектом вашей модели представления. Объект модели представления можно рассматривать как адаптер модели для поддержки конкретных потребностей представления.

person Eben Geer    schedule 16.12.2011

The Model represents the data and business logic. It should represent your business

(домен), и он никоим образом не должен знать о вашем пользовательском интерфейсе.

The View this is the UI – the bridge between your software and its users. Normally 

View знает только ViewModel, но могут быть случаи, в которых может иметь смысл открыть модель непосредственно ему. Итак, ваш XAML для пользовательского интерфейса, такого как Grid, Button, DataTemplate, Style, Control Template и т. Д., Можно найти здесь.

The ViewModel: this is the way you connect your model to a specific View. See it has 

код, который массирует ваши модели таким образом, чтобы представление могло их использовать. ViewModel должен быть независимым от View, как и должна. Таким образом, взаимодействие между View и ViewModel полностью основано на DataBinding. Когда вы имеете дело с шаблоном MVVM, свойство use Dependency будет минимальным. например, когда вы в это время создаете какой-либо настраиваемый элемент управления, вы должны использовать свойство Dependency для поддержки привязки.

person Kishore Kumar    schedule 17.12.2011
comment
Итак, ViewModel является синонимом контроллера, как в MVC? - person SliverNinja - MSFT; 20.12.2011

три элемента, которые он заявил как часть шаблона MVVM

В этом есть недостаток. Эти вещи не являются частью MVVM; они включают MVVM. Частями MVVM являются модель, представление и модель представления. Называть «код» частью MVVM или называть его частью ViewModel является чрезмерным упрощением и бесполезно.

В элементе управления Listbox есть код; он бы не работал, если бы его не было.

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

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

person Emond Erno    schedule 17.12.2011