Яку основу для MVVM я повинен використовувати? [зачинено]


233

Я розробляю програму з моделлю MVVM, але я дійшов до моменту, коли мені потрібно вибрати, яку рамку використовувати.

Серед можливих варіантів:

  • Інструментарій MVVM
  • Фонд МВВМ
  • WPF Application Framework (WAF)
  • Світло MVVM
  • Калібр
  • Cinch
  • Призма
  • ReactiveUI

З вашого досвіду, що краще?


14
+1 - Добре запитання, але уточнюйте, будь ласка, "краще". Різні рамки забезпечують різні переваги, найкраще залежить від ваших вимог. Чекайте на відповіді :)
Рассел

Що ж, було б дуже добре, що ви можете використовувати WPF та Silverlight та з мінімальною кривою навчання.
Рангел

2
Ви також можете перевірити Каліфорнія. codeplex.com/caliburn
Кент Boogaart

Вибачте Кент. Як я міг забути Калібурн?
Піт Оханлон

2
Близький і старий, але ... Я зробив свій перший проект, використовуючи призму (відповідь нижче), як мені потрібна підтримка компонентів. Мій останній проект я зробив сирим - взагалі немає рамки. Все, що вам потрібно, це командний клас, і ви можете робити MVVM без фреймворку - це приблизно легкий вага, як ви можете отримати.
Дейв

Відповіді:


194

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

Microsofts MVVM Toolkit - це ще дуже багато на альфа-етапах. Коли він був спочатку випущений, це потребувало трохи дикунів від учнів через те, що він не зробив. Сказавши це, МС намагається покращити цю рамку, тому її слід спостерігати - вона поки що ще не готова.

MVVM Foundation - ах рамка Джоша Сміта. Джош - один із татусів МВВМ і був величезним прихильником і вчителем зразка. Як результат, багато чого, що ви знайдете в інших рамах, має відбитки пальців Джоша по всьому. Ця рамка покликана забезпечити основи MVVM, а не вирішувати деякі більш езотеричні проблеми. Спочатку це було призначено лише для WPF, але такі люди, як Лоран Буньйон і я, додали функціональні можливості / проекти, які означають, що це буде також сумісна з Silverlight рамка.

WAF - цього немає досвіду, тому я не можу коментувати це, боюся.

MVVM Light - Laurent Bugnion взяв на себе його, і щойно оновлений до версії 2. Це дуже хороший фреймворк, але знову ж таки не призначений охоплювати кожен аспект додатків MVVM. З огляду на досвід Лоран, він має дуже сильну підтримку Silverlight та Blendability.

Оновлення Лоран щойно повідомив мені, що версії .NET 3.5 та .NET 4.0 сумісні з функціями. Вау, щоб поїхати Лоран.

Сінч - відмінна структура MVVM, що відповідає лише WPF, від Sacha Barber. Це охоплює більше місця, ніж рамки, про які я говорив вище. Це відмінна рамка, і він використовує переваги концепцій, висвітлених у Біллі Кемпфі проектом Onyx . Onyx призначений для доповнення фреймворків MVVM і додає функціональних можливостей, які люди, як правило, важко робити в MVVM / WPF. Знову ж таки, спочатку призначений був лише WPF, Onyx прогресував, включивши сумісність з SL - робота, в якій я особливо пишаюся тим, що брала участь.

Призма - знову ж таки, я ніколи його не використовував, але чув про це багато хорошого.

Океан - Карл Шиффлетт, керівник програми в команді Cider, нещодавно випустив повнофункціональну рамку WPF MVVM. Знову ж таки, це відмінна основа, і є багато що рекомендувати.

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


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

Поряд з цим, яка ваша структура рівня доступу до даних? хлопці .. LINQ, LLBLGen, EF, nHibernate?
Jirapong

Це залежить від проекту та вимог. Іноді ми використовуємо LINQ, іноді NHibernate, іноді Castle ActiveRecord, а іноді стійкі об’єкти eXpress.
Піт Оханлон

3
Привіт Піте, просто хочу прокоментувати, що MVVM Light Toolkit працює так само, як для WPF 3.5 та WPF 4, як для Silverlight 3 та Silverlight 4. Я обережно тримати функції синхронізувати, наскільки я можу. Ви маєте рацію щодо сумісності, але це для мене головне питання :) Cheers, Laurent
LBugnion

1
Я був розчарований, що інструментарій MVVM не було оновлено для роботи з 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 like class для з'єднання команди UI з обробниками ViewModel

• Одиничні тести поставляються з рамкою

Cinch

• Автор: Sacha Barber

• Підтримка Silverlight: ні (Cinch версія 2 підтримує Silverlight)

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

• Хостинг: CodePlex

• Ліцензія: відкрита ліцензія на кодекс проекту

• Особливості:

  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. створення перегляду моделей за допомогою розширення розмітки

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

  4. IOC / DI з використанням підходу ServiceProvider

  5. Модель перегляду, що закривається

  6. зачекайте курсор (використовуючи новий WaitCursor () {// ваш код тут})

Фонд МВВМ

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

• Підтримка Silverlight: ні

• Документація: статті про реалізацію Messenger у блозі Джоша або Марлона Греча

• Хостинг: CodePlex

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

• Особливості:

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

  2. PropertyChanged монітор подій

Калібр

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

• Підтримка Silverlight: так

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

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

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

• Особливості:

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

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

  3. Програми калібру повністю перевірені

  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: релекоманда, закритий переглядмодель…

  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).

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

WPF Application Framework (WAF) - це легкий фреймворк, який допомагає створювати програми WPF з MVVM. Це лише для WPF, тому він не підтримує Silverlight. Це йде трохи іншим шляхом, ніж більшість інших фреймворків MVVM із впровадженням контролерів . Вони відповідають за робочий процес додатків і вони посередні між різними ViewModels.


19

Мех. Mvvm насправді не потребує цілого фреймворку для підтримки ІМО. Якщо ви розумієте концепцію, почати з чистого базового рівня VM, який реалізує INotify, досить просто, і просто піти звідти.


4
Саме тому багато розробників розробляють бібліотеку mvvm. Якщо те, що ви говорите, є правдою, то чому б ці розробники витрачали свій час? Чому ці користувачі фреймворків продовжують використовувати улюблену рамку mvvm? Правда, "Mvvm насправді не потребує цілого фреймворку для підтримки IMO". Але без MVVM не обійтися.
Syaiful Nizam Yahya

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


10

Змішайте своє!

Я використовував EventAggregator від PRISM, з ViewModelBase від MVVM Foundation тощо. Я також налаштував RelayCommand (DelegateCommand в деяких місцях дзвонив), щоб прийняти й інші дані тощо.

Я б не рекомендував лише одну рамку.


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

1
Я бачу сенс документації. Але, можливо, не буде необхідності розробляти внутрішні документи. Посилання на зовнішні сайти з документацією можна вбудувати в сам код
Vasudevan Kannan

8

Моя ставка буде на Caliburn та MVVMlight, схоже, що не багато з цих mvvm фреймворків підтримують сріблясте світло. Я можу передбачити, що буде обрано більше 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.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.