Следует ли использовать шаблон Model-View-ViewModel (MVVM) в проектах Silverlight?

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

Я слышал, что шаблон MVVM, созданный сообществом разработчиков WPF, также может помочь в сохранении «смешиваемости» элементов управления Silverlight. Я все еще пытаюсь понять это, но вот несколько объяснений:

Одним из потенциальных недостатков является то, что шаблон требует дополнительных классов, хотя и не обязательно большего количества кода (как показано второй ссылкой выше). Мысли?

Я также рекомендую вам использовать IOC, Caliburn-Micro и Ninject, чтобы получить отличную комбинацию.

Lucas B 14.12.2010 21:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
41
1
21 944
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Я не уверен, что смогу ответить на ваш вопрос, но я нашел очень ценную статью ниже. Йонас Фоллесо использует ninject для отключения своих сервисов в режиме дизайна / смешивания. Очень хорошо!

http://jonas.follesoe.no/YouCardRevisitedImplementingDependencyInjectionInSilverlight.aspx

Я пробовал несколько вариантов и остановился на MVVM как на лучшем для меня выборе. Смешиваемость - важный момент, и я также считаю, что аспект виртуальной машины интуитивно понятен для настройки динамического поведения, процедурных эффектов и анимации (например, Silverlight.FX от Nikhil). В какой-то момент я попытался полностью избежать Blend через плавные интерфейсы, но нахожу связь между пользовательским интерфейсом и поведением слишком болезненной в долгосрочной перспективе. Я хочу спроектировать свой пользовательский интерфейс в Blend, а затем добавить эффекты и другое поведение в код, это оказалось для меня лучшим шаблоном, которому я мог бы следовать до сих пор.

Ответ принят как подходящий

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

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

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

Другой способ - создать какой-то элемент управления ObjectDataSource (невизуальный), который имеет два свойства: контекст данных времени разработки и контекст данных времени выполнения. Элемент управления определяет, где выполняется, а затем устанавливает для родительского контекста данных нужный объект.

В последнее время я использую MVVM в нескольких разных проектах Silverlight, и он работает очень хорошо, я определенно рекомендую его. Сообщение Йонаса - отличное место для начала, недавно я также использовал блоггинг в своих опытах с MVVM и создал действительно простое решение для демонстрации основных точек соприкосновения.

Я всегда думал, что MVVM и PresntationModel http://martinfowler.com/eaaDev/PresentationModel.html по сути одно и то же. PresentationModel намного проще сказать. Я успешно использовал его в java swing, windows forms, WPF и silverlight. Если вы думаете о разделении проблем, модель презентации имеет большой смысл. У вас есть один класс, единственная задача которого - предоставить модель, удобную для презентации. На самом деле не имеет значения, какая технология используется для отображения его на экране. Это может изменить некоторые детали реализации, но разделение проблем - хорошая идея, независимо от того, как вы показываете информацию. Благодаря такому разделению вы можете легко писать тесты для вашей модели представления независимо от технологии представления. Так что это плюс.

Я думаю, многие из нас ждут, когда первопроходцы продолжат работу и создадут действительно хорошие образцы приложений с использованием MVVM в Silverlight (и WPF, если на то пошло). Есть ряд сложных областей, таких как отсутствие ICommand в Silverlight или сложность запуска и остановки взаимодействие с анимацией только с использованием привязки данных.

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

Я согласен с йонасом. MVVM кажется мне моделью, которая лучше всего работает для меня (хотя Джон Папа считает, что MVP имеет больше смысла). У меня есть статья MSDN об этом, которая выйдет в марте, и, надеюсь, ответит на призыв и даст хороший пример.

Кстати, я хотел бы видеть некоторую сплоченность в отделе MVVM Framework. Пока еще нет хорошего решения для фреймворка. Мне нравится Jonas (я думаю, что Jonas - это FX Framework), но, поскольку он не совместим с WPF, для некоторых это может быть неправильным выбором.

Я также согласен с Йонасом относительно MVVM с Silverlight. Я действительно считаю, что MVP - тоже хороший выбор, но недавно у меня было время попробовать как MVP, так и MVVM с Silverlight, и я гораздо более доволен результатами MVVM. (Да, я передумал, чем больше использовал MVVM). VM абстрагирует привязку модели от представления (очевидно) в MVVM, что позволяет использовать больше сценариев привязки (по крайней мере, более чистые способы их выполнения), чем с помощью MVP. Однако это всего лишь один аспект.

Я опубликую на своем сайте несколько примеров MVP и MVVM с Silverlight.

Мне нравится шаблон ViewModel, и я очень его рекомендую. В моем блоге есть несколько статей типа "начало работы с ViewModel".

С выпуском Prism v2 от P&P в феврале 2009 г. для Silverlight и WPF стала доступна еще лучшая поддержка MVVM. Подробнее см. microsoft.com/compositewpf.

Есть очень хорошее видео, знакомое с шаблоном MVVM на Techdays 2010, с четким объяснением:

Для более сложных приложений, требующих более высокой степени автоматизированного тестирования, это определенно имеет смысл, и переход от привязки DependencyProperties к привязке DataContext намного удобнее, чем ее аналог в ASP.NET.

Самая большая проблема, с которой я столкнулся с Silverlight, - это тестирование фактического пользовательского интерфейса (я думаю, что на данный момент существует одна коммерческая структура) и огромное количество вызовов событий, с которыми вы сталкиваетесь при использовании служб WCF (или WebClient, если на то пошло) с Silverlight.

Взгляните на мою статью о MVVM и Silverlight в реальных проектах и ​​решайте сами.

http://alexburtsev.wordpress.com/2011/03/05/mvvm-pattern-in-silverlight-and-wpf/

Другие вопросы по теме