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

StackOverflow https://stackoverflow.com/questions/1409553

  •  05-07-2019
  •  | 
  •  

Вопрос

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

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

  • Инструментарий MVVM
  • Фонд МВВМ
  • Платформа приложений WPF (WAF)
  • Легкий МВВМ
  • Калиберн
  • подпруга
  • Призма

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

Это было полезно?

Решение

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

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

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

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

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

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

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

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

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

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

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

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

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

извините за длинный рассказ

Общие черты:

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

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

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

подпруга

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

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

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

• Хостинг:КодПлекс

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

• Функции:

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

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

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

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

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

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

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

  8. помощники по работе с потоками

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

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

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

Набор инструментов MVVM Light

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

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

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

• Хостинг:КодПлекс

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

• Функции:

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

  2. Шаблон проекта и элемента VS

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

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

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

Помощники MVVM

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

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

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

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

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

• Функции:

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

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

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

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

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

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

Фонд МВВМ

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

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

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

• Хостинг:КодПлекс

• Лицензия:МС-ПЛ

• Функции:

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

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

Калиберн

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

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

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

• Хостинг:КодПлекс http://www.codeplex.com/caliburn

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

• Функции:

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

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

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

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

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

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

Оникс

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

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

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

• Хостинг:КодПлекс

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

• Функции:

  1. Шаблон ServiceLocator

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

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

Кальций

• Автор:Дэниел Вон

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

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

• Хостинг:КодПлекс

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

• Функции:

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

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

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

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

  5. Клиент-серверное журналирование готово к работе «из коробки»

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

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

nRoute

• Автор:Риши

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

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

• Хостинг:КодПлекс

• Лицензия:МС-ПЛ

• Функции:

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

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

  3. просмотреть услуги:OpenFileDialog, ShowMessage…

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

Нито МВВМ

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

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

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

• Хостинг:КодПлекс

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

• Функции:

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

Океан

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

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

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

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

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

• Функции:

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

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

  3. Базовые классы модели просмотра:команда реле, модель closeableview…

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

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

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

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

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

• Хостинг:КодПлекс

• Лицензия:МС-ПЛ

• Функции:

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

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

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

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

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

ГудЛайт

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

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

• Хостинг:КодПлекс

• Лицензия:МС-ПЛ

• Функции:

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

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

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

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

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

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

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

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

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

Калиберн & Оникс!

Смешайте сами!

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

Я бы не рекомендовал использовать только один фреймворк как таковой.

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

Также обратите внимание на Mix10.Из разговора я многому узнаю:создание вашей структуры mvvm.

Также платформа Cocktail и DevForce от Идеальный клинок

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

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

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

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

Есть также nRoute

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top