Какую структуру для MVVM следует использовать?

Я разрабатываю приложение с моделью MVVM, но я достиг точки, в которой мне нужно выбрать, какую инфраструктуру использовать.

Среди возможных вариантов:

  • Инструментарий MVVM
  • Фонд MVVM
  • WPF Application Framework (WAF)
  • Light MVVM
  • Caliburn
  • Cinch
  • Prism

По вашему опыту, что лучше?

Ответ 1

Это действительно зависит от того, чего вы пытаетесь достичь, и от того, какая инфраструктура вам уже нужна, плюс легкость, с которой вы можете найти образцы, которые помогут вам. Я собираюсь объявить интерес здесь, потому что я активно участвовал, по крайней мере, в одной инфраструктуре MVVM, и у меня был вход в другие группы WPF Disciples, поэтому я немного предвзятый. Говоря это, здесь идет:

Microsoft MVVM Toolkit - это все еще очень много в альфа-этапах. Когда он был изначально выпущен, это немного пошло от Disciples из-за того, чего он не делал. Говоря, что MS ищет говядину этой структуры, чтобы ее можно было наблюдать - она ​​еще не готова.

Фонд MVVM - ah Джош Смит версия структуры. Джош - один из папы MVVM, и он был огромным сторонником и учителем картины. В результате многие из того, что вы найдете в других рамках, имеют отпечатки пальцев Джоша. Эта структура предназначена для обеспечения основ MVVM, а не для решения некоторых более эзотерических проблем. Первоначально это предназначалось только для WPF, но такие люди, как Laurent Bugnion и я, добавили функциональность/проекты, которые означают, что это будет также совместимая с Silverlight среда.

WAF - нет опыта, поэтому я не могу прокомментировать это, я боюсь.

MVVM Light - Лоран Бугнион взял на себя это и только что обновил до версии 2. Это очень хорошая основа, но опять же она не предназначена для охвата каждого отдельного аспекта приложений MVVM. Учитывая фон Laurent, он имеет очень сильную поддержку Silverlight и Blendability.

Обновление. Laurent только что сообщил мне, что версии .NET 3.5 и .NET 4.0 совместимы с функциями. Вау пойти Лоран.

Cinch - Sacha Barber отлично работает с WPF только для MVVM. Это охватывает больше оснований, чем те рамки, о которых я говорил выше. Это отличная основа и использует концепции, описанные в Bill Kempf, отличный проект Onyx. Onyx предназначен для дополнения фреймворков MVVM и добавляет функциональность, которую обычно трудно было сделать людям в MVVM/WPF. Опять же, изначально предназначалось только для WPF, Onyx продвинулась, чтобы включить совместимость SL - работа, в которой я особенно горжусь тем, что был вовлечен.

Prism - Опять же, я никогда не использовал его, но я слышал много хорошего.

Океан - Карл Шиффлетт, менеджер программы в команде Cider, недавно выпустил полнофункциональную среду MVVM WPF. Опять же, это отличная рамка и есть возможность порекомендовать ее.

Суть в том, что скачать различные рамки взглянуть на них и разработать, какой из них наиболее интуитивно соответствует тому, как вы думаете и с вашими требованиями. Если вы считаете, что хотите поддерживать Silverlight с той же кодовой базы, тогда только рамки WPF должны быть снижены.

Ответ 2

Я нашел эту статью очень полезной http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ Итак, я приведу ее для будущих пользователей

Я обновляю раздел Cinch и добавляю поддержку Silverlight к его функциям

Прошу прощения за длинную историю

Общие функции:

• Класс ViewModelBase (для реализации интерфейса INotifyPropertyChanged)

• RelayCommand как класс для связывания команды UI с обработчиками ViewModels

• Модульные тесты поставляются с фреймворком

Кушак

• Автор: Sacha Barber

• Поддержка Silverlight: нет (Cinch версия 2 поддерживает Silverlight)

• Документация: отлично, 6 статей, опубликованных в CodeProject

• Хостинг: CodePlex

• Лицензия: Открытая лицензия на проект кода

• Особенности:

  • приложенное поведение

  • проверка с помощью IDataErrorInfo

  • поддержка IEditableObject

  • создание и подписка слабых событий

  • обмен сообщениями посредников с использованием слабых событий

  • Поддержка IOC/DI (с использованием Unity)

  • службы: регистратор событий, окно сообщения, диалог открытия сохранения, всплывающее окно

  • помощники по потокам

  • поддержка пунктов меню

  • закрывающиеся режимы просмотра

  • Генератор кода MVVM

Инструмент MVVM Light Toolkit

• Автор: Лоран Бугнион

• Поддержка Silverlight: да

• Документация: многие статьи доступны в блоге Laurents и других разработчиков.

• Хостинг: CodePlex

• Лицензия: лицензия MIT

• Особенности:

  • Установщик MSI

  • Проект VS и шаблон элемента

  • фрагменты кода VS

  • Система сообщений для межмодульной связи

  • Обработка событий как команды

Помощники MVVM

• Автор: Марк Смит

• Поддержка Silverlight: no

• Документация: некоторые статьи в блоге Marks

• Хостинг: персональный сайт

• Лицензия: не определена

• Особенности:

  • приложенное поведение

  • создание модели с использованием расширения разметки

  • проверка на основе атрибутов

  • IOC/DI с использованием подхода ServiceProvider

  • closeable viewmodel

  • ждать курсора (используя новый WaitCursor() {//ваш код здесь})

Фонд MVVM

• Автор: Джош Смит

• Поддержка Silverlight: no

• Документация: статьи о реализации Messenger в блоге Джоша или Марлона Гречса

• Хостинг: CodePlex

• Лицензия: MS-PL

• Особенности:

  • Система сообщений для межмодульной связи

  • Монитор событий PropertyChanged

Caliburn

• Автор: Роб Эйзенберг

• Поддержка Silverlight: да

• Документация: доступна полная онлайн-документация

• Хостинг: CodePlex http://www.codeplex.com/caliburn

• Лицензия: лицензия MIT

• Особенности:

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

  • которые обрабатывают проблемы жизненного цикла пользовательского интерфейса, такие как обработка активации, деактивация и выключение семантики для различных компонентов пользовательского интерфейса.

  • Приложения Caliburn полностью проверяются

  • различные утилиты, такие как менеджер фоновых задач

  • поддерживает различные шаблоны пользовательского интерфейса (не только MVVM)

  • контейнер для инъекций зависимостей

Onyx

• Автор: William e Kempf

• Поддержка Silverlight: no

• Документация: базовое введение доступно в CodePlex

• Хостинг: CodePlex

• Лицензия: не указана

• Особенности:

  • Шаблон ServiceLocator

  • Создание ViewModel с использованием настраиваемого расширения разметки

  • Услуги, связанные с пользовательским интерфейсом, такие как IDisplayMessage

Кальций

• Автор: Даниэль Воган

• Поддержка Silverlight: no

• Документация: 2 очень подробные статьи по CodeProject (part1 и part2)

• Хостинг: CodePlex

• Лицензия: использование, копирование, изменение и/или распространение и сохранение авторских прав!

• Особенности:

  • Менеджер модулей для включения или отключения модулей во время выполнения

  • службы обмена сообщениями для взаимодействия с пользователем с клиентом или сервером с использованием того же API

  • Командная служба связывает WPF ICommands с интерфейсами содержимого, которые становятся активными только тогда, когда активный режим просмотра или viewmodel реализует интерфейс

  • Адаптеры регионов для панелей инструментов и меню

  • Журналирование клиент-сервера готово к работе из-за коробки

  • Включает модули, такие как веб-браузер, текстовый редактор, окно вывода и многое другое

  • Интерфейс с вкладками с индикацией грязного файла (многократно используется для модулей)

nRoute

• Автор: Риши

• Поддержка Silverlight: да

• Документация: многие статьи доступны в блоге авторов (см. домашнюю страницу проекта CodePlex для ссылок)

• Хостинг: CodePlex

• Лицензия: MS-PL

• Особенности:

  • поддержка моделей поведения Blend3 и триггеров

  • Структура локатора ресурсов

  • просматривать службы: OpenFileDialog, ShowMessage...

  • использует атрибуты для отображения View и ViewModel вместе

Nito MVVM

• Автор: Shammah

• Поддержка Silverlight: no

• Документация: no

• Хостинг: CodePlex

• Лицензия: не указана

• Особенности:

  • различные дружественные MVVM реализации интерфейса ICommand

Океан

• Автор: Карл Шиффлет

• Поддержка Silverlight: no

• Документация: статьи доступны в блоге Karls

• Хостинг: персональный сайт

• Лицензия: не указана

• Особенности:

  • написан на VB.Net

  • проверка на основе атрибутов

  • базовые классы viewmodel: relaycommand, closeableviewmodel...

  • Уровень доступа к данным SQL-сервера

Базовая инфраструктура MVVM

• Автор: Лестер Лобо

• Поддержка Silverlight: no

• Документация: пример приложения, доступный в библиотеке

• Хостинг: CodePlex

• Лицензия: MS-PL

• Особенности:

  • делегирование команд \Keybinding

  • обмен сообщениями между виртуальными машинами

  • обработка событий как команды с прикрепленным поведением

  • диалоговые окна обработки (и многое другое) в качестве служб

  • фрагменты кода VS

GoodLight

• Автор: Питер Оханлон • Поддержка Silverlight: да

• Документация: пример приложения, доступный в библиотеке

• Хостинг: CodePlex

• Лицензия: MS-PL

• Особенности:

  • Управление "рабочей областью" (набор документов, который можно закрыть)

  • поддержка скинов

  • обмен сообщениями между виртуальными машинами

Ответ 3

Я пытаюсь описать Ракурсы, отсутствующие в Пите, отличный ответ:

MVVM Toolkit (Microsoft) - очень легкая библиотека с шаблонами проектов Visual Studio, которые должны поддерживать новичков с помощью этого шаблон. Если Microsoft получит хорошие отзывы для своего инструментария, то они могут реализовать это как новый шаблон проекта Visual Studio (возможно, 2010).

Призма (Microsoft p & p) является основой, которая обеспечивает больше, чем поддержка шаблона MVVM. Основная цель этого проекта - помочь вам создать модульные WPF и/или приложения Silverlight. Когда вам просто нужно реализовать шаблон MVVM, или вы новичок в .NET/WPF, я не рекомендую этот проект.  См. Также: Ссылка.

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

Ответ 4

Мех. Mvvm на самом деле не требует полной основы для поддержки ИМО. Если вы понимаете концепцию, довольно просто начать с чистого базового элемента VM, который реализует INotify, и просто оттуда.

Ответ 5

Также смотрите:

Caliburn и Onyx!

Ответ 6

Смешайте свои собственные!

Я использовал EventAggregator из PRISM, с ViewModelBase из фонда MVVM и так далее. Я также настроил RelayCommand (DelegateCommand, вызываемый в некоторых местах), чтобы принимать другие данные и т.д.

Я бы не рекомендовал только одну структуру как таковую.

Ответ 7

Моя ставка будет на Caliburn и MVVMlight, похоже, что многие из этих mvvm-фреймворков поддерживают silverlight. Я могу предвидеть, что на MVVM будет больше возможностей, чем каркасы IoC, потому что сложнее установить границу функции в структуру mvvm. Я думаю, лучший способ узнать, какой из них лучше подходит вашему проекту, - это перечисление/сравнение их возможностей.

Также проверьте Mix10. Я многому учусь из разговора: построим структуру mvvm.

Ответ 8

Также рамки Cocktail и DevForce Ideablade

Ответ 9

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

Ответ 10

В общем, я 90% через мое приложение, и все, что я использовал MVVM Toolkit, это функция factory, которая строит команду для меня, с учетом функции делегата для запуска в Execute. Я думаю, что через пару часов я могу переключиться на любые другие рамки или без рамки.

Ответ 11

Еще один вопрос - MEFedMVVM. Я использовал его на нескольких проектах, и он легкий, неинтрузивный и поддерживает Silverlight и WPF. Он также может поддерживать данные времени разработки в Blend для тех, кто использует этот продукт.

Ответ 12

Если вы ищете Extensibility (возможность писать надстройки) поверх рамки приложения WPF/MVVM, вас может заинтересовать SoapBox Core: я написал это. Это открытое исходное, поэтому, даже если вы его не используете, для вас могут быть хорошие идеи. Он использует MEF как для расширяемости, так и для IoC.

Ответ 13

Там также nRoute

Очень хорошая инфраструктура приложений для WPF/Silverlight, которая поддерживает MVVM