Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

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

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

Ответ 6

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

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

Ответ 8

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

Ответ 9

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

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

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

Ответ 10

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

Ответ 11

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