Jakiego frameworka do MVVM powinienem użyć? [zamknięte]

Obecnie pytanie to nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi będą poparte faktami, referencjami lub wiedzą specjalistyczną, ale to pytanie będzie prawdopodobnie wywoływało debatę, argumenty, ankiety lub rozszerzoną dyskusję. Jeśli uważasz, że to pytanie można poprawić i ewentualnie ponownie otworzyć, odwiedź Pomoc centrum dla wskazówek. Zamknięte 8 lat temu .

Rozwijam aplikację z modelem MVVM, ale doszedłem do punktu, w którym muszę wybrać framework do użycia.

Wśród możliwych opcji są:

  • MVVM Toolkit
  • Fundacja MVVM
  • WPF Application Framework (WAF)
  • Light MVVM
  • Caliburn
  • Cinch
  • pryzmat
  • ReactiveUI
Z Twojego doświadczenia, co jest lepsze?
Author: kenny, 2009-09-11

13 answers

To naprawdę zależy od tego, co próbujesz osiągnąć, i ile infrastruktury chcesz już na miejscu, plus łatwość, z jaką możesz znaleźć próbki, które Ci pomogą. Mam zamiar zadeklarować zainteresowanie tutaj, ponieważ byłem aktywnie zaangażowany w co najmniej jeden framework MVVM, i miałem wkład w innych poprzez WPF Disciples group, więc jestem trochę stronniczy. Mówiąc to:

Microsofty MVVM Toolkit - to wciąż bardzo dużo w fazie alfa. Kiedy został pierwotnie wydany, zajęło trochę savaging od uczniów z powodu tego, co nie zrobił. Mówiąc to, MS chce wzmocnić ten framework, więc trzeba go oglądać - po prostu jeszcze nie jest gotowy.

MVVM Foundation - wersja frameworka autorstwa Josha Smitha. Josh jest jednym z ojców MVVM i był wielkim orędownikiem i nauczycielem wzorca. W rezultacie, wiele z tego, co znajdziesz w innych frameworkach, ma wszędzie odciski Josha. Ramy te są ma na celu dostarczenie podstaw MVVM, a nie rozwiązywanie niektórych bardziej ezoterycznych problemów. Pierwotnie było to przeznaczone tylko dla WPF, ale ludzie tacy jak Laurent Bugnion i ja dodaliśmy funkcjonalność / projekty, które oznaczają, że będzie to również kompatybilny z Silverlight framework.

WAF - brak doświadczenia, więc nie mogę tego skomentować obawiam się.

MVVM Light - właśnie zaktualizowano go do wersji 2. Jest to bardzo dobry framework, ale znowu nie jest przeznaczony do pokrycia każdego aspektu aplikacji MVVM. Biorąc pod uwagę tło Laurenta, ma bardzo silne wsparcie Silverlight i Blendability w nim.

Update Laurent właśnie poinformował mnie, że wersje. NET 3.5 i. NET 4.0 są kompatybilne z funkcjami. / Align= "left" /

Cinch-doskonały framework WPF tylko MVVM. Obejmuje to więcej terenu niż ramy, o których mówiłem powyżej. To doskonały framework i wykorzystuje z pojęć ujętych w projekcie Billa Kempfa excellent Onyx. Onyx ma na celu uzupełnienie frameworków MVVM i dodaje funkcjonalność, która zazwyczaj jest trudna do zrobienia w MVVM / WPF. Ponownie, pierwotnie przeznaczony tylko do WPF, Onyx rozwinął się o kompatybilność z SL - praca, w którą jestem szczególnie dumny, że byłem zaangażowany.

Prism - Ponownie, nigdy go nie używałem, ale słyszałem o nim wiele dobrych rzeczy.

Ocean - Karl Shifflett, Menedżer programu w zespole Cider, niedawno wydał w pełni funkcjonalny framework WPF MVVM. Ponownie, jest to doskonały framework i ma wiele do polecania.

Najważniejsze jest to, aby pobrać różne frameworki, przyjrzeć się im i ustalić, który z nich pasuje najbardziej intuicyjnie do Twojego sposobu myślenia i twoich wymagań. Jeśli uważasz, że możesz chcieć obsługiwać Silverlight z tej samej bazy kodowej, to frameworki tylko WPF powinny zostać zdyskontowane.

 195
Author: Pete OHanlon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-10 18:40:20

Uważam ten artykuł za bardzo przydatny http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ tak, że przynoszę go tutaj dla nadchodzących użytkowników

Aktualizuję sekcję Cinch i dodaję obsługę silverlight do jego funkcji

Przepraszam za długą historię

Cechy wspólne:

* Klasa ViewModelBase (do implementacji interfejsu INotifyPropertyChanged)

• RelayCommand like class to link UI command to ViewModel ' s handlers

* testy jednostkowe dostarczane są wraz z frameworkiem

Cinch

• Autor: Sacha Barber

[[0]} * obsługa Silverlight: nie (Wersja Cinch 2 obsługuje Silverlight)

• dokumentacja: doskonała, 6 artykułów opublikowanych na CodeProject

• Hosting: CodePlex

• Licencja: Code Project Open License

• cechy:

  1. Attached behaviors

  2. Walidacja przy użyciu IDataErrorInfo

  3. Wsparcie dla IEditableObject

  4. Tworzenie słabych zdarzeń i Subskrypcja

  5. Mediator messaging using weak events

  6. Wsparcie IOC/DI (przy użyciu Unity)

  7. Usługi: rejestrator zdarzeń, okno wiadomości, Otwórz okno dialogowe Zapisz, popup

  8. Threading helpers

  9. Obsługa pozycji menu

  10. Closeable viewmodels

  11. Generator kodu MVVM

MVVM Light Toolkit

• Autor: Laurent Bugnion

• obsługa Silverlight: TAK

• dokumentacja: wiele artykułów dostępnych na blogu Laurenta + także inni programiści

• Hosting: CodePlex

• Licencja: licencja MIT

• cechy:

  1. MSI installer

  2. VS projekt i przedmiot szablon

  3. VS Code snippets

  4. System Messenger do komunikacji inter-viewmodel

  5. Obsługa zdarzeń jako polecenia

MVVM Helpers

• Autor: Mark Smith

• obsługa Silverlight: nie

• dokumentacja: kilka artykułów na blogu Marka

• Hosting: personal website

• licencja: nie zdefiniowana

• cechy:

  1. Attached behaviors

  2. Tworzenie Viewmodel przy użyciu rozszerzenia znaczników

  3. Walidacja oparta na atrybutach

  4. IOC / DI z wykorzystaniem podejścia ServiceProvider

  5. Closeable viewmodel

  6. Wait cursor (używając nowego WaitCursor () {//Twój kod tutaj })

Fundacja MVVM

• Autor: Josh Smith

• obsługa Silverlight: nie

• dokumentacja: artykuły o implementacji komunikatora na blogu Josha lub Marlona Grecha

• Hosting: CodePlex

• Licencja: MS-PL

• cechy:

  1. System Messenger do komunikacji inter-viewmodel

  2. PropertyChanged event monitor

Caliburn

• Autor: Rob Eisenberg

• obsługa Silverlight: TAK

• dokumentacja: pełna dokumentacja online dostępna

• Hosting: CodePlex http://www.codeplex.com/caliburn

• Licencja: licencja MIT

• cechy:

  1. Polecenia są zbudowane na bazie akcji, a zatem mają wiele tych samych funkcji, w tym wiele parametrów wejściowych, filtrów i automatycznego asynchronicznego wykonywania

  2. Prezentery obsługujące problemy z cyklem życia interfejsu, takie jak obsługa aktywacji, dezaktywacji i wyłączania semantyka dla różnych komponentów UI

  3. Aplikacje Caliburn są w pełni testowalne

  4. Różne narzędzia, takie jak Menedżer zadań w tle

  5. Obsługuje różne wzorce interfejsu użytkownika (nie tylko MVVM)

  6. Dependency Injection container

Onyx

• autor: William e Kempf

• obsługa Silverlight: nie

• dokumentacja: podstawowe wprowadzenie dostępne na CodePlex

• Hosting: CodePlex

• licencja: nie określona

• cechy:

  1. Wzór ServiceLocator

  2. Tworzenie ViewModel przy użyciu niestandardowego rozszerzenia znaczników

  3. Usługi związane z interfejsem użytkownika, takie jak IDisplayMessage

Wapń

• Autor: Daniel Vaughan

• obsługa Silverlight: nie

• dokumentacja: 2 artykuły na temat CodeProject (part1 i part2)

• Hosting: CodePlex

• Licencja: używać, kopiować, modyfikować i / lub rozpowszechniać i zachować prawa autorskie!

• cechy:

  1. Menedżer modułów do włączania lub wyłączania modułów w czasie wykonywania

  2. Usługi komunikacji w celu interakcji z użytkownikiem z Klienta lub serwera przy użyciu tego samego API

  3. Usługa poleceń do kojarzenia WPF ICommands z interfejsami treści, które staje się aktywny tylko wtedy, gdy aktywny widok lub viewmodel implementuje interfejs

  4. Adaptery regionów dla pasków narzędzi i menu

  5. Logowanie klient-serwer gotowe do pracy po wyjęciu z pudełka

  6. Zawiera moduły, takie jak przeglądarka internetowa, edytor tekstu, okno wyjściowe i wiele innych

  7. Interfejs z kartami ze wskazaniem brudnego pliku (wielokrotnego użytku w modułach)

NRoute

• Autor: Rishi

• obsługa Silverlight: TAK

• dokumentacja: wiele artykułów dostępnych na blogu autora (linki znajdują się na stronie głównej Projektu CodePlex)

• Hosting: CodePlex

• Licencja: MS-PL

• cechy:

  1. Obsługa zachowań i modeli wyzwalaczy Blend3

  2. Resource locator framework

  3. Zobacz usługi: OpenFileDialog, ShowMessage ...

  4. Używa atrybutów do widok mapy i ViewModel razem

Nito MVVM

• Autor: Shammah

• obsługa Silverlight: nie

• dokumentacja: nie

• Hosting: CodePlex

• licencja: nie określona

• cechy:

    [38]}różne implementacje interfejsu ICommand przyjazne dla MVVM]}

Ocean

• Autor: Karl Shifflet

• Obsługa Silverlight: nie

• dokumentacja: artykuły dostępne na blogu Karla

• Hosting: personal website

• licencja: nie określona

• cechy:

  1. Napisane w VB.Net

  2. Atrybut based validation

  3. Klasy bazowe Viewmodel: relaycommand, closeableviewmodel ...

  4. SQL server data access layer

Podstawowy MVVM framework

• Autor: Lester Lobo

• obsługa Silverlight: nie

• dokumentacja: przykładowa aplikacja dostępna w bibliotece

• Hosting: CodePlex

• Licencja: MS-PL

• cechy:

  1. Delegowanie Poleceń\Keybinding

  2. Wiadomości między maszynami wirtualnymi

  3. Obsługa zdarzeń jako polecenia z dołączonymi zachowaniami

  4. Obsługa okien dialogowych (i więcej) jako usługi

  5. VS Code snippets

GoodLight

* autor: Peter O ' Hanlon * obsługa Silverlight: TAK

• dokumentacja: przykładowa aplikacja dostępna w bibliotece

• Hosting: CodePlex

• Licencja: MS-PL

• cechy:

  1. "workspace" zarządzanie (zbiór dokumentów, które można zamknąć)

  2. Skóra wsparcie

  3. Wiadomości między maszynami wirtualnymi

 55
Author: Nasser Hadjloo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-10 14:28:55

Staram się opisać frameworki, których brakuje w świetnej odpowiedzi Pete ' a:

MVVM Toolkit (Microsoft) jest bardzo lekką biblioteką z szablonami projektów Visual Studio, które powinny wspierać początkujących z tym wzorem. Jeśli Microsoft otrzyma dobre opinie na temat swojego zestawu narzędzi, może zaimplementować to jako nowy szablon projektu Visual Studio (może 2010).

Prism (Microsoft p & p) jest frameworkiem, który zapewnia więcej niż wsparcie dla wzorca MVVM. Na głównym celem tego projektu jest pomoc w budowie modułowych aplikacji WPF i/lub Silverlight. Jeśli po prostu potrzebujesz zaimplementować wzorzec MVVM lub jesteś początkującym w. NET / WPF, nie polecę tego projektu. Zobacz też: Link .

WPF Application Framework (WAF) to lekki framework, który pomaga tworzyć aplikacje WPF z MVVM. Jest tylko dla WPF i nie obsługuje Silverlight. Idzie nieco inaczej niż większość innych frameworków MVVM z wprowadzenie kontrolerów . Są one odpowiedzialne za przepływ pracy aplikacji i pośredniczą między różnymi modelami widoku.

 45
Author: jbe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-26 00:10:46

Meh. Mvvm tak naprawdę nie wymaga całego frameworka do obsługi IMO. Jeśli rozumiesz tę koncepcję, dość łatwo jest rozpocząć od czystej bazy danych VM, która implementuje INotify, i po prostu przejść od tego momentu.

 19
Author: Pierreten,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-18 01:25:26

Zobacz też:

Caliburn & Onyx !

 17
Author: rudigrobler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-09-11 12:00:28

Mix your own!

Użyłem EventAggregator z PRISM, z ViewModelBase z MVVM foundation i tak dalej. Poprawiłem również polecenie RelayCommand (DelegateCommand wywołane w niektórych miejscach), aby zaakceptować inne dane i tak dalej.

Nie polecałbym tylko jednego frameworka per se.

 11
Author: Andrei Rînea,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-10-21 22:04:28

Stawiam na Caliburn i MVVMlight, wygląda na to, że niewiele z tych frameworków mvvm obsługuje silverlight. Mogę przewidzieć, że będzie więcej frameworków MVVM do wyboru niż frameworków IoC, ponieważ trudniej jest ustawić granicę funkcji do frameworku mvvm. Myślę, że najlepszym sposobem, aby dowiedzieć się, który z nich jest lepszy dla Twojego projektu, będzie lista/porównanie ich funkcji.

Zobacz też: Mix10. Wiele się uczę z rozmowy: budowanie twojego mvvm ramy.

 9
Author: MCSean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-20 19:36:27

Również Cocktail i DevForce framework by Ideablade

 7
Author: ramon22,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-20 02:34:16

Używam pryzmatu i to lubię. Jedną z wielkich rzeczy dla mnie było to, że będą inni ludzie, którzy mogą mi pomóc w razie potrzeby i dobre przykłady. Po uruchomieniu podstawy, istnieje cała masa rozszerzeń, które będą potrzebne dla Twojej aplikacji i jest to o wiele łatwiejsze, gdy pracujesz z tym samym frameworkiem co inne.

 5
Author: dave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-16 04:11:55

Podsumowując, jestem w 90% za pomocą mojej aplikacji i wszystko, czego użyłem MVVM Toolkit to funkcja fabryczna, która buduje dla mnie polecenie z funkcją delegata do uruchomienia w Execute. Myślę, że mógłbym przełączyć się na dowolny inny framework lub nie framework w ciągu kilku godzin.

 3
Author: mico,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-05 15:16:16

Kolejnym do rozważenia jest MEFedMVVM . Używałem go w kilku projektach i jest lekki, nieinwazyjny i obsługuje Silverlight i WPF. Jest również w stanie obsługiwać dane w czasie projektowania w Blend, dla tych, którzy używają tego produktu.

 3
Author: John Rayner,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-16 21:59:03

Jeśli szukasz rozszerzalności (możliwość pisania dodatków) na frameworku aplikacji WPF / MVVM, możesz być zainteresowany Soapbox Core zastrzeżenie: napisałem to . Jest open source, więc nawet jeśli go nie używasz, mogą być tam dla ciebie dobre pomysły. Wykorzystuje MEF zarówno dla rozszerzalności, jak i IoC.

 2
Author: Scott Whitlock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-11-07 03:45:16

Istnieje również nRoute

Naprawdę ładny framework aplikacji dla WPF / Silverlight, który obsługuje MVVM

 2
Author: Daniel O,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-04 13:59:39