Какие рамки для MVVM мне следует использовать? [закрыто]


233

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

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

  • MVVM Инструментарий
  • Фонд MVVM
  • WPF Application Framework (WAF)
  • Легкий МВВМ
  • Caliburn
  • подпруга
  • призма
  • ReactiveUI

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


14
+1 - Хороший вопрос, но, пожалуйста, уточните «лучше». Разные фреймворки дают разные преимущества, лучшее зависит от ваших требований. С нетерпением ждем ответов :)
Рассел

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

2
Возможно, вы захотите проверить Caliburn тоже. codeplex.com/caliburn
Кент Boogaart

Извини, Кент. Как я мог забыть Калибурна?
Пит Оханлон

2
Старый и старый, но ... Я сделал свой первый проект, используя Prism (ответ ниже), так как мне нужна поддержка компонентов. Мой последний проект я сделал сырым - никаких рамок вообще. Все, что вам нужно, это командный класс, и вы можете делать MVVM без фреймворка - это достаточно просто.
Дэйв

Ответы:


194

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

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

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

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

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

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

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

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

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

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


4
Я использую тот, который мы написали, потому что у нас есть очень специальные потребности для MVVM. На него сильно повлияла работа, которую проделал Джош, и в ближайшем будущем я опубликую ее как Open Source (я занят извлечением проприетарных битов). Это называется Goldlight.
Пит Оханлон

Наряду с этим, какова ваша структура уровня доступа к данным? ребята .. LINQ, LLBLGen, EF, nHibernate?
Jirapong

Это зависит от проекта и требований. Иногда мы используем LINQ, иногда NHibernate, иногда Castle ActiveRecord, а иногда и eXpress Persistent Objects.
Пит Оханлон

3
Привет, Пит, просто хочу прокомментировать, что MVVM Light Toolkit работает точно так же для WPF 3.5 и WPF 4, что и для Silverlight 3 и Silverlight 4. Я стараюсь синхронизировать функции настолько, насколько могу. Вы правы насчет смешиваемости, но это для меня серьезное беспокойство :) Приветствия, Лоран
LBugnion

1
Я был разочарован тем, что MVVM Toolkit не был обновлен для работы с Visual Studio 2010. Возможно, стоит добавить это в процесс принятия решений. Большинство людей, которых я знаю, используя шаблоны MVVM в течение 2010 года, используют MVVM Light, а некоторые мигрировали к этому только по этой причине.
ScottCher

54

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

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

Извините за длинную историю

Общие черты:

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

• RelayCommand как класс, чтобы связать команду пользовательского интерфейса с обработчиками ViewModel

• Юнит-тесты поставляются с фреймворком

подпруга

• Автор: Саша Барбер

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

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

• Хостинг: CodePlex

• Лицензия: Code Project Open License

• Характеристики:

  1. прикрепленное поведение

  2. проверка с использованием IDataErrorInfo

  3. поддержка IEditableObject

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

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

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

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

  8. помощники

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

  10. закрываемые модели

  11. Генератор кода MVVM

MVVM Light Toolkit

• Автор: Лоран Бюньон

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

• Документация: много статей доступно в блоге Лорана + и другие разработчики

• Хостинг: CodePlex

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

• Характеристики:

  1. Установщик MSI

  2. VS проект и шаблон товара

  3. Фрагменты кода VS

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

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

Помощники MVVM

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

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

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

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

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

• Характеристики:

  1. прикрепленное поведение

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

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

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

  5. закрываемая модель

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

Фонд MVVM

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

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

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

• Хостинг: CodePlex

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

• Характеристики:

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

  2. Монитор событий PropertyChanged

Caliburn

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

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

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

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

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

• Характеристики:

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

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

  3. Приложения Caliburn полностью тестируемы

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

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

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

Оникс

• Автор: Уильям и Кемпф

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

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

• Хостинг: CodePlex

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

• Характеристики:

  1. Шаблон ServiceLocator

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

  3. Сервисы, связанные с пользовательским интерфейсом, такие как IDisplayMessage

кальций

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

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

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

• Хостинг: CodePlex

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

• Характеристики:

  1. Диспетчер модулей для включения или отключения модулей во время выполнения

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

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

  4. Региональные адаптеры для панелей инструментов и меню

  5. Ведение журнала клиент-сервер готово к работе "из коробки"

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

  7. Интерфейс с вкладками и грязной индикацией файла

nRoute

• Автор: Риши

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

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

• Хостинг: CodePlex

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

• Характеристики:

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

  2. структура локатора ресурса

  3. просмотр сервисов: OpenFileDialog, ShowMessage…

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

Нито МВВМ

• Автор: Шамма

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

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

• Хостинг: CodePlex

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

• Характеристики:

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

Океан

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

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

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

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

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

• Характеристики:

  1. написано в VB.Net

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

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

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

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

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

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

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

• Хостинг: CodePlex

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

• Характеристики:

  1. делегирование команд \ связывание клавиш

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

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

  4. обработка диалогов (и более) как сервисов

  5. Фрагменты кода VS

GoodLight

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

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

• Хостинг: CodePlex

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

• Характеристики:

  1. Управление «рабочим пространством» (набор документов, которые могут быть закрыты)

  2. поддержка кожи

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


Отличный пост. Просто подумал, что добавлю, что Cinch версии 2 поддерживает Silverlight.
Kildareflare

44

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

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

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

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


19

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


4
Это причина, почему многие разработчики развивают библиотеку mvvm. Если то, что вы говорите, правда, то зачем этим разработчикам тратить свое время? Почему пользователи этих фреймворков продолжают использовать свои любимые фреймворки mvvm? Правда, «Mvvm на самом деле не требует всей платформы для поддержки IMO». Но это не практично, чтобы обойтись без рамки MVVM.
Саяфул Низам Яхья

3
-1 IMO, пишущий свой собственный класс RelayCommand для ICommands, класс Messenger для взаимодействия между виртуальными машинами и свой собственный контейнер IoC, чтобы упомянуть только самые основные инструменты, необходимые для хорошо функционирующего приложения WPF, является основной PITA. Ваш ответ действителен только для самых простых программ.
Heliac


10

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

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

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


19
Я с уважением не согласен, проблема с этим подходом проявится, когда вы получите новых столяров - стоимость входа в проект будет намного выше, поскольку внутренние документы, как правило, не являются приоритетными.
Флориан Дойон

1
Я вижу смысл в документации. Но, может быть, нет необходимости разрабатывать собственные документы. Ссылки на внешние сайты с документацией могут быть встроены в сам код
Васудеван Каннан,

8

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

Также проверьте Mix10. Из этого разговора я многому научился: создавая свою среду mvvm.


4
Я нашел этот разговор весьма полезным. Вот прямая ссылка: live.visitmix.com/MIX10/Sessions/EX15
anshul


4

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


2

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


2

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


1

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


1

Есть также nRoute

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.