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

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

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

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

Ответы [ 12 ]

32 голосов
/ 19 декабря 2008

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

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

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

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

4 голосов
/ 17 декабря 2008

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

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

3 голосов
/ 08 января 2009

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

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

2 голосов
/ 10 января 2009

Я люблю шаблон ViewModel и очень рекомендую его. У меня есть несколько постов типа "Начало работы с ViewModel" в моем блоге.

2 голосов
/ 27 декабря 2008

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

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

2 голосов
/ 25 декабря 2008

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

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

2 голосов
/ 17 декабря 2008

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

1 голос
/ 28 апреля 2010

Существует очень хорошее видео-введение Techdays 2010 в шаблон MVVM, четко объясненное:

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

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

1 голос
/ 20 декабря 2008

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

0 голосов
/ 05 марта 2011

Посмотрите на мою статью о MVVM и Silverlight в реальных проектах и ​​решите сами.

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

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