Z jakich ram MVVM powinienem korzystać? [Zamknięte]


233

Tworzę aplikację z modelem MVVM, ale doszedłem do punktu, w którym muszę wybrać, którego szkieletu użyć.

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

  • Zestaw narzędzi MVVM
  • Fundacja MVVM
  • Struktura aplikacji WPF (WAF)
  • Lekki MVVM
  • Caliburn
  • Cinch
  • Pryzmat
  • ReactiveUI

Z twojego doświadczenia, co jest lepsze?


14
+1 - Dobre pytanie, ale proszę wyjaśnić „lepiej”. Różne ramy zapewniają różne zalety, najlepsze zależą od wymagań. Czekamy na odpowiedzi :)
Russell

Cóż, byłoby bardzo dobrze, że można używać z WPF i Silverlight, przy minimalnej krzywej uczenia się.
Rangel

2
Możesz także sprawdzić Caliburn. codeplex.com/caliburn
Kent Boogaart

Przepraszam Kent. Jak mogłem zapomnieć o Caliburn?
Pete OHanlon,

2
Zamknij i stary, ale ... Mój pierwszy projekt wykonałem przy użyciu Prism (odpowiedź poniżej), ponieważ potrzebuję wsparcia komponentu. Mój ostatni projekt zrobiłem na surowo - żadnych ram. Wszystko, czego potrzebujesz, to klasa komend i możesz wykonywać MVVM bez frameworka - to niewielka waga.
dave

Odpowiedzi:


194

To naprawdę zależy od tego, co próbujesz osiągnąć i od tego, ile infrastruktury już potrzebujesz, a także od łatwości, z jaką możesz znaleźć próbki, które ci pomogą. Zamierzam zadeklarować zainteresowanie tutaj, ponieważ byłem aktywnie zaangażowany w co najmniej jedną platformę MVVM i miałem wkład w inne za pośrednictwem grupy WPF Disciples, więc jestem nieco stronniczy. Mówiąc to, oto:

Microsofts MVVM Toolkit - to wciąż bardzo dużo w fazie alfa. Kiedy został pierwotnie wydany, zajęło mu to trochę dzikości ze względu na to, czego nie zrobił. Mówiąc to, MS chce ulepszyć ten framework, więc należy go obejrzeć - po prostu nie jest jeszcze gotowy.

Fundacja MVVM - wersja frameworka Josh Smitha. Josh jest jednym z ojców MVVM i był wielkim obrońcą i nauczycielem tego wzoru. W rezultacie wiele z tego, co można znaleźć w innych ramach, ma na sobie odciski palców Josha. Ramy te mają zapewnić podstawy MVVM, a nie rozwiązać niektóre bardziej ezoteryczne problemy. Początkowo było to przeznaczone tylko dla WPF, ale ludzie tacy jak Laurent Bugnion i ja dodaliśmy funkcjonalność / projekty, co oznacza, że ​​będzie to również framework kompatybilny z Silverlight.

WAF - bez doświadczenia, więc nie mogę tego komentować Obawiam się.

MVVM Light - podejście Laurenta Bugnion, właśnie zaktualizowane do wersji 2. Jest to bardzo dobry framework, ale znowu nie ma on obejmować każdego aspektu aplikacji MVVM. Biorąc pod uwagę pochodzenie Laurenta, ma on bardzo silne wsparcie Silverlight i Blendability.

Aktualizacja Laurent właśnie poinformowała mnie, że wersje .NET 3.5 i .NET 4.0 są kompatybilne z funkcjami. Wau to go Laurent.

Cinch - doskonałe środowisko MVVM tylko dla WPF Sacha Barbera. Obejmuje to więcej niż ramy, o których mówiłem powyżej. Jest to doskonały framework i wykorzystuje koncepcje zawarte w doskonałym projekcie Billa Kempfa Onyx . Onyx ma uzupełniać frameworki MVVM i dodaje funkcjonalność, która zwykle była trudna dla ludzi w MVVM / WPF. Ponownie, pierwotnie przeznaczony wyłącznie do WPF, Onyx poczynił postępy w zakresie kompatybilności z SL - praca, z której jestem szczególnie dumny, że jestem w to zaangażowana.

Pryzmat - Znowu nigdy go nie użyłem, ale słyszałem o nim wiele dobrych rzeczy.

Ocean - Karl Shifflett, kierownik programu w zespole Cider, niedawno wydał w pełni funkcjonalną platformę WPF MVVM. Ponownie, jest to doskonała platforma i ma wiele do polecania.

Podsumowując, pobierz różne frameworki, spójrz na nie i sprawdź, który z nich najbardziej intuicyjnie pasuje do twojego sposobu myślenia i twoich wymagań. Jeśli uważasz, że możesz chcieć obsługiwać Silverlight z tej samej bazy kodu, wówczas frameworki tylko WPF powinny zostać zdyskontowane.


4
Używam jednego, który napisaliśmy, ponieważ mamy bardzo specjalistyczne potrzeby dotyczące MVVM. Ma na to duży wpływ praca, którą wykonał Josh, i wkrótce wydam ją jako Open Source (jestem zajęty wyrywaniem zastrzeżonych elementów). Nazywa się Goldlight.
Pete OHanlon,

Oprócz tego, jaka jest twoja struktura warstwy dostępu do danych? chłopaki .. LINQ, LLBLGen, EF, nHibernate?
Jirapong,

To zależy od projektu i wymagań. Czasami używamy LINQ, czasem NHibernate, czasem Castle ActiveRecord, a czasem eXpress Persistent Objects.
Pete OHanlon,

3
Cześć Pete, chcę tylko skomentować, że MVVM Light Toolkit działa tak samo dla WPF 3.5 i WPF 4, jak dla Silverlight 3 i Silverlight 4. Staram się, aby funkcje były zsynchronizowane w miarę możliwości. Masz rację co do mieszalności, to jest dla mnie głównym problemem :) Pozdrawiam, Laurent
LBugnion

1
Byłem rozczarowany, że MVVM Toolkit nie został zaktualizowany do pracy z Visual Studio 2010. Może chciałbym dodać to do procesu decyzyjnego. Większość osób, które znam za pomocą szablonów MVVM w 2010 r., Korzysta z MVVM Light, a niektóre migrowały do ​​tego właśnie z tego powodu.
ScottCher

54

Uważam, że ten artykuł jest bardzo przydatny http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ Tak, że mam go tutaj dla przyszłych użytkowników

Aktualizuję sekcję Cinch i dodam obsługę funkcji Silverlight do jej funkcji

Przepraszam za długą historię

Wspólne cechy:

• Klasa ViewModelBase (do implementacji interfejsu INotifyPropertyChanged)

• RelayCommand jak klasa, aby połączyć polecenie interfejsu użytkownika z programami obsługi ViewModel

• Testy jednostkowe są dostarczane wraz z platformą

Cinch

• Autor: Sacha Barber

• Obsługa Silverlight: nie (wersja Cinch 2 obsługuje Silverlight)

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

• Hosting: CodePlex

• Licencja: Code Project Open License

• Cechy:

  1. przywiązane zachowania

  2. sprawdzanie poprawności za pomocą IDataErrorInfo

  3. obsługa IEditableObject

  4. słabe tworzenie wydarzeń i subskrypcja

  5. przesyłanie komunikatów mediatora przy użyciu słabych zdarzeń

  6. Obsługa IOC / DI (przy użyciu Unity)

  7. usługi: rejestrator zdarzeń, okno komunikatu, otwarte okno zapisu, wyskakujące okienko

  8. pomocnicy w wątkach

  9. obsługa pozycji menu

  10. zamykane modele widoków

  11. Generator kodu MVVM

Lekki zestaw narzędzi MVVM

• Autor: Laurent Bugnion

• Wsparcie Silverlight: tak

• Dokumentacja: wiele artykułów dostępnych na blogu Laurenta oraz innych programistów

• Hosting: CodePlex

• Licencja: licencja MIT

• Cechy:

  1. Instalator MSI

  2. VS projekt i szablon przedmiotu

  3. Fragmenty kodu VS

  4. System komunikacyjny do komunikacji między modelami

  5. Obsługa zdarzeń jako poleceń

Pomocnicy MVVM

• Autor: Mark Smith

• Wsparcie Silverlight: nie

• Dokumentacja: niektóre artykuły na blogu Marka

• Hosting: osobista strona internetowa

• Licencja: nie określono

• Cechy:

  1. przywiązane zachowania

  2. tworzenie viewmodel przy użyciu rozszerzenia znaczników

  3. sprawdzanie poprawności na podstawie atrybutów

  4. IOC / DI przy użyciu podejścia ServiceProvider

  5. zamykany model viewmodel

  6. poczekaj kursor (używając nowego WaitCursor () {// twój kod tutaj})

Fundacja MVVM

• Autor: Josh Smith

• Wsparcie Silverlight: nie

• Dokumentacja: artykuły o implementacji Messengera na blogu Josha lub Marlona Grecha

• Hosting: CodePlex

• Licencja: MS-PL

• Cechy:

  1. System komunikacyjny do komunikacji między modelami

  2. PropertyChanged monitor zdarzeń

Caliburn

• Autor: Rob Eisenberg

• Wsparcie Silverlight: tak

• Dokumentacja: dostępna pełna dokumentacja online

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

• Licencja: licencja MIT

• Cechy:

  1. polecenia są zbudowane na Akcjach, a zatem mają wiele takich samych funkcji, w tym wiele parametrów wejściowych, filtrów i automatycznego wykonywania asynchronicznego

  2. prezenterzy, którzy obsługują problem cyklu życia interfejsu użytkownika, taki jak obsługa semantyki aktywacji, dezaktywacji i zamykania dla różnych komponentów interfejsu

  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. pojemnik do wstrzykiwań zależności

Onyks

• Autor: William e Kempf

• Wsparcie Silverlight: nie

• Dokumentacja: podstawowe wprowadzenie dostępne w CodePlex

• Hosting: CodePlex

• Licencja: nie określono

• Cechy:

  1. Wzorzec 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

• Wsparcie Silverlight: nie

• Dokumentacja: 2 bardzo szczegółowe artykuły na temat CodeProject (część 1 i część 2)

• Hosting: CodePlex

• Licencja: używaj, kopiuj, modyfikuj i / lub rozpowszechniaj i zachowuj prawa autorskie!

• Cechy:

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

  2. usługi przesyłania wiadomości umożliwiające interakcję z użytkownikiem z klienta lub serwera przy użyciu tego samego interfejsu API

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

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

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

  6. Obejmuje 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 różnych modułach)

nRoute

• Autor: Rishi

• Wsparcie 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ługuje zachowania Blend3 i modele wyzwalaczy

  2. środowisko lokalizatora zasobów

  3. zobacz usługi: OpenFileDialog, ShowMessage…

  4. używa atrybutów do mapowania View i ViewModel

Nito MVVM

• Autor: Shammah

• Wsparcie Silverlight: nie

• Dokumentacja: nr

• Hosting: CodePlex

• Licencja: nie określono

• Cechy:

  1. różne implementacje przyjazne dla MVVM interfejsu ICommand

Ocean

• Autor: Karl Shifflet

• Wsparcie Silverlight: nie

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

• Hosting: osobista strona internetowa

• Licencja: nie określono

• Cechy:

  1. napisane w VB.Net

  2. sprawdzanie poprawności na podstawie atrybutów

  3. viewmodel klasy podstawowe: relaycommand, closeableviewmodel…

  4. Warstwa dostępu do danych serwera SQL

Podstawowa struktura MVVM

• Autor: Lester Lobo

• Wsparcie Silverlight: nie

• Dokumentacja: przykładowa aplikacja dostępna z biblioteką

• Hosting: CodePlex

• Licencja: MS-PL

• Cechy:

  1. delegowanie poleceń \ Keybinding

  2. przesyłanie wiadomości między maszynami wirtualnymi

  3. obsługa zdarzeń jako poleceń z dołączonymi zachowaniami

  4. obsługa okien dialogowych (i więcej) jako usług

  5. Fragmenty kodu VS

Dobre światło

• Autor: Peter O'Hanlon • Wsparcie Silverlight: tak

• Dokumentacja: przykładowa aplikacja dostępna z biblioteką

• Hosting: CodePlex

• Licencja: MS-PL

• Cechy:

  1. Zarządzanie „obszarem roboczym” (zestaw dokumentów, które można zamknąć)

  2. wsparcie skóry

  3. przesyłanie wiadomości między maszynami wirtualnymi


Wspaniały post. Pomyślałem, że dodam, że wersja 2 Cinch obsługuje Silverlight.
Kildareflare

44

Próbuję opisać Frameworki, których brakuje w świetnej odpowiedzi Pete'a:

MVVM Toolkit (Microsoft) to bardzo lekka biblioteka z szablonami projektów Visual Studio, która powinna obsługiwać początkujących z tym wzorcem. Jeśli Microsoft otrzyma dobre opinie na temat swojego zestawu narzędzi, może to zaimplementować jako nowy szablon projektu Visual Studio (być może 2010).

Pryzmat (Microsoft p & p) to framework, który zapewnia więcej niż obsługę wzorca MVVM. Głównym celem tego projektu jest pomoc w budowie modułowych aplikacji WPF i / lub Silverlight. Gdy potrzebujesz tylko wdrożyć wzorzec MVVM lub jesteś początkującym w .NET / WPF, nie polecam tego projektu. Zobacz także: Link .

WPF Application Framework (WAF) to lekki framework, który pomaga tworzyć aplikacje WPF za pomocą MVVM. To jest tylko dla WPF, więc nie obsługuje Silverlight. Po wprowadzeniu kontrolerów idzie to nieco inaczej niż większość innych platform MVVM. Są odpowiedzialni za przepływ pracy aplikacji i pośredniczą między różnymi modelami ViewModels.


19

Meh Mvvm tak naprawdę nie wymaga całego frameworka do obsługi IMO. Jeśli rozumiesz tę koncepcję, łatwo jest zacząć od czystej klasy podstawowej maszyny wirtualnej, która implementuje INotify, i po prostu idź od tego miejsca.


4
Istnieje powód, dla którego wielu programistów rozwija bibliotekę mvvm. Jeśli to, co mówisz, jest prawdą, to dlaczego ci programiści mieliby tracić czas? Dlaczego użytkownicy tych ram nadal używają swoich ulubionych ram mvvm? To prawda, że ​​„Mvvm tak naprawdę nie wymaga całego frameworka do obsługi IMO”. Ale nie jest praktyczne obejście się bez frameworka MVVM.
Syaiful Nizam Yahya

3
-1 IMO pisze własną klasę RelayCommand dla ICommands, klasę Messenger do komunikacji między maszynami wirtualnymi oraz własny kontener IoC, aby wspomnieć tylko o najbardziej podstawowych narzędziach wymaganych do dobrze działającej aplikacji WPF, jest główną PITA. Twoja odpowiedź jest ważna tylko dla najprostszych programów.
Heliac


10

Miksuj własne!

Użyłem EventAggregator z PRISM, z ViewModelBase z fundacji MVVM i tak dalej. Poprawiłem także RelayCommand (w niektórych miejscach wzywano DelegateCommand), aby akceptować także inne dane i tak dalej.

Nie poleciłbym tylko jednego frameworku per se.


19
Z szacunkiem się nie zgadzam, problem z tym podejściem ujawni się, gdy zdobędziesz nowych dołączających - koszt przystąpienia do projektu będzie znacznie wyższy, ponieważ dokumenty wewnętrzne na ogół nie są priorytetem.
Florian Doyon

1
Widzę sens dokumentacji, ale może nie być potrzeby opracowywania wewnętrznych dokumentów. Linki do zewnętrznych stron z dokumentacją można osadzić w samym kodzie
Vasudevan Kannan

8

mój zakład będzie dotyczył Caliburn i MVVMlight, wydaje się, że niewiele z tych ram mvvm obsługuje silverlight. Mogę przewidzieć, że do wyboru będzie więcej frameworków MVVM niż frameworków IoC, ponieważ trudniej jest ustawić granicę funkcji w frameworku mvvm. Myślę, że najlepszym sposobem, aby dowiedzieć się, który jest bardziej odpowiedni dla twojego projektu, będzie lista / porównanie ich funkcji.

Zobacz także Mix10. Dużo się uczę z rozmowy: budowanie frameworka mvvm.


4
Uważam tę rozmowę za całkiem przydatną. Oto bezpośredni link: live.visitmix.com/MIX10/Sessions/EX15
anshul


4

Używam Pryzmatu i podoba mi się. Jedną z wielkich rzeczy dla mnie było to, że będą inni ludzie, którzy mogliby mi pomóc w razie potrzeby i dobre przykłady. Gdy już zaczniesz korzystać z podstaw, będziesz mieć całą gamę rozszerzeń, których potrzebujesz do swojej aplikacji i jest to o wiele łatwiejsze, gdy pracujesz z tymi samymi ramami, co inne.


2

Podsumowując, mam 90% mojej aplikacji i wszystko, czego użyłem MVVM Toolkit, to funkcja fabryczna, która buduje dla mnie polecenie, biorąc pod uwagę funkcję delegowania do uruchomienia w Wykonaj. Myślę, że mógłbym przejść do innego frameworka lub bez niego w ciągu kilku godzin.


2

Kolejnym do rozważenia jest MEFedMVVM . Użyłem go w kilku projektach i jest lekki, nieinwazyjny i obsługuje Silverlight i WPF. Jest także w stanie obsługiwać dane projektowe w Blend dla tych, którzy korzystają z tego produktu.


1

Jeśli szukasz rozszerzenia (możliwości pisania dodatków) na platformie aplikacji WPF / MVVM, możesz zainteresować się zastrzeżeniem SoapBox Core : Napisałem to . Jest open source, więc nawet jeśli go nie używasz, mogą być dla Ciebie dobre pomysły. Używa MEF zarówno dla rozszerzalności, jak i IoC.


1

Istnieje również nRoute

Naprawdę fajna platforma aplikacji dla WPF / Silverlight, która obsługuje MVVM

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.