webentwicklung-frage-antwort-db.com.de

Welches Framework für MVVM soll ich verwenden?

Ich entwickle eine Anwendung mit dem MVVM-Modell, aber ich habe einen Punkt erreicht, an dem ich das zu verwendende Framework auswählen muss.

Zu den möglichen Optionen gehören:

  • MVVM Toolkit
  • MVVM-Stiftung
  • WPF-Anwendungsframework (WAF)
  • Leichte MVVM
  • Caliburn
  • Cinch
  • Prisma
  • ReactiveUI

Was ist Ihrer Erfahrung nach besser?

230
Rangel

Es hängt wirklich davon ab, was Sie erreichen möchten und wie viel Infrastruktur Sie bereits haben möchten, sowie davon, mit welcher Leichtigkeit Sie Beispiele finden können, die Ihnen helfen. Ich werde hier mein Interesse bekunden, da ich aktiv an mindestens einem MVVM-Framework beteiligt war und über die WPF-Disciples-Gruppe Beiträge für andere eingereicht habe. Daher bin ich ein bisschen voreingenommen. Um das zu sagen, hier ist es:

Microsofts MVVM Toolkit - das ist noch sehr viel in der Alpha-Phase. Als es ursprünglich veröffentlicht wurde, war es für die Jünger etwas grausam, weil es nicht funktioniert hat. Davon abgesehen ist MS bestrebt, dieses Framework zu verbessern, damit man es sich ansehen kann - es ist einfach noch nicht fertig.

MVVM Foundation - ah Josh Smiths Version des Frameworks. Josh ist einer der Väter von MVVM und ein großer Verfechter und Lehrer des Musters. Infolgedessen weist eine Menge von dem, was Sie in anderen Frameworks finden, überall Joshs Fingerabdrücke auf. Dieses Framework soll die Grundlagen von MVVM vermitteln und nicht einige der esoterischeren Probleme behandeln. Ursprünglich war dies nur für WPF gedacht, aber Leute wie Laurent Bugnion und ich haben Funktionen/Projekte hinzugefügt, die bedeuten, dass dies auch ein Silverlight-kompatibles Framework ist.

WAF - keine Erfahrung damit, also kann ich es leider nicht kommentieren.

MVVM Light - Laurent Bugnion hat es übernommen und gerade auf Version 2 aktualisiert. Dies ist ein sehr gutes Framework, das jedoch nicht jeden einzelnen Aspekt von MVVM-Anwendungen abdecken soll. In Anbetracht des Hintergrunds von Laurent hat es eine sehr starke Unterstützung für Silverlight und Blendability.

Update Laurent hat mich soeben darüber informiert, dass die Versionen von .NET 3.5 und .NET 4.0 funktionskompatibel sind. Wau Laurent zu gehen.

Cinch - Sacha Barbers ausgezeichnetes WPF-reines MVVM-Framework. Dies betrifft mehr Gründe als die Frameworks, über die ich oben gesprochen habe. Es ist ein ausgezeichnetes Framework und nutzt Konzepte, die in Bill Kempfs exzellentem Onyx -Projekt behandelt werden. Onyx soll MVVM-Frameworks ergänzen und Funktionen hinzufügen, die in MVVM/WPF normalerweise nur schwer möglich sind. Onyx war ursprünglich nur für WPF gedacht und hat nun auch die SL-Kompatibilität übernommen. Ich bin besonders stolz darauf, an dieser Arbeit beteiligt gewesen zu sein.

Prisma - Wieder habe ich es nie benutzt, aber ich habe viele gute Dinge darüber gehört.

Ocean - Karl Shifflett, Programmmanager im Cider-Team, hat kürzlich ein WPF MVVM-Framework mit vollem Funktionsumfang veröffentlicht. Auch dies ist ein ausgezeichneter Rahmen und kann es nur empfehlen.

Das Fazit ist, laden Sie die verschiedenen Frameworks herunter, schauen Sie sie sich an und finden Sie heraus, welches am intuitivsten zu Ihrer Denkweise und Ihren Anforderungen passt. Wenn Sie der Meinung sind, dass Sie möglicherweise Silverlight aus derselben Codebasis unterstützen möchten, sollten Sie für die WPF-Frameworks einen Rabatt gewähren.

194
Pete OHanlon

Ich fand diesen Artikel sehr nützlich http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ Damit ich ihn für zukünftige Benutzer hierher bringe

Ich aktualisiere den Cinch-Bereich und füge Silverlight-Unterstützung zu seinen Funktionen hinzu

Die lange Geschichte tut mir leid

Gemeinsame Merkmale:

• ViewModelBase-Klasse (für die Implementierung der INotifyPropertyChanged-Schnittstelle)

• RelayCommand-like-Klasse, um den UI-Befehl mit den ViewModel-Handlern zu verknüpfen

• Unit-Tests werden mit dem Framework geliefert

Cinch

• Autor: Sacha Barber

• Silverlight-Unterstützung: Nein (Cinch Version 2 unterstützt Silverlight)

• Dokumentation: ausgezeichnet, 6 Artikel in CodeProject veröffentlicht

• Hosting: CodePlex

• Lizenz: Code Project Open License

• Eigenschaften:

  1. angehängte Verhaltensweisen

  2. validierung mit IDataErrorInfo

  3. unterstützung für IEditableObject

  4. erstellung und Abonnement von schwachen Ereignissen

  5. mediator Messaging mit schwachen Ereignissen

  6. IOC/DI-Unterstützung (mit Unity)

  7. dienste: Ereignisprotokollierung, Meldungsfeld, Öffnen des Speicherdialogs, Popup

  8. threading-Helfer

  9. unterstützung für Menüpunkte

  10. verschließbare Ansichtsmodelle

  11. MVVM-Codegenerator

MVVM Light Toolkit

• Autor: Laurent Bugnion

• Silverlight-Unterstützung: Ja

• Dokumentation: Viele Artikel in Laurents Blog und auch in anderen Entwicklern

• Hosting: CodePlex

• Lizenz: MIT Lizenz

• Eigenschaften:

  1. MSI-Installationsprogramm

  2. VS-Projekt- und Elementvorlage

  3. VS-Code-Schnipsel

  4. Nachrichtensystem für die Kommunikation zwischen Ansichtsmodellen

  5. Ereignisse als Befehle behandeln

MVVM-Helfer

• Autor: Mark Smith

• Silverlight-Unterstützung: Nein

• Dokumentation: Einige Artikel in Marks Blog

• Hosting: persönliche Website

• Lizenz: nicht definiert

• Eigenschaften:

  1. angehängte Verhaltensweisen

  2. ansichtsmodellerstellung mit Markup-Erweiterung

  3. attributbasierte Validierung

  4. IOC/DI unter Verwendung des ServiceProvider-Ansatzes

  5. verschließbares Ansichtsmodell

  6. wait cursor (mit neuem WaitCursor () {// dein Code hier})

MVVM Foundation

• Autor: Josh Smith

• Silverlight-Unterstützung: Nein

• Dokumentation: Artikel über die Messenger-Implementierung im Blog von Josh oder Marlon Grech

• Hosting: CodePlex

• Lizenz: MS-PL

• Eigenschaften:

  1. Nachrichtensystem für die Kommunikation zwischen Ansichtsmodellen

  2. PropertyChanged-Ereignismonitor

Caliburn

• Autor: Rob Eisenberg

• Silverlight-Unterstützung: Ja

• Dokumentation: vollständige Online-Dokumentation verfügbar

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

• Lizenz: MIT Lizenz

• Eigenschaften:

  1. befehle basieren auf Aktionen und haben daher viele der gleichen Funktionen, einschließlich mehrerer Eingabeparameter, Filter und automatischer asynchroner Ausführung

  2. präsentatoren, die sich mit dem UI-Lebenszyklus befassen, z. B. mit der Behandlung der Semantik der Aktivierung, Deaktivierung und des Herunterfahrens für verschiedene UI-Komponenten

  3. Caliburn-Anwendungen sind vollständig testbar

  4. verschiedene Dienstprogramme wie ein Hintergrund-Task-Manager

  5. unterstützt verschiedene UI-Muster (nicht nur MVVM)

  6. abhängigkeit Injektionsbehälter

Onyx

• Autor: William e Kempf

• Silverlight-Unterstützung: Nein

• Dokumentation: Grundlegende Einführung in CodePlex

• Hosting: CodePlex

• Lizenz: nicht angegeben

• Eigenschaften:

  1. ServiceLocator-Muster

  2. ViewModel-Erstellung mit einer benutzerdefinierten Markup-Erweiterung

  3. UI-bezogene Dienste wie IDisplayMessage

Calcium

• Autor: Daniel Vaughan

• Silverlight-Unterstützung: Nein

• Dokumentation: 2 sehr detaillierte Artikel zu CodeProject (Teil1 und Teil2)

• Hosting: CodePlex

• Lizenz: Verwenden, kopieren, modifizieren und/oder verbreiten Sie und behalten Sie das Urheberrecht!

• Eigenschaften:

  1. Modul-Manager zum Aktivieren oder Deaktivieren von Modulen zur Laufzeit

  2. messaging-Dienste für die Interaktion mit dem Benutzer über den Client oder Server unter Verwendung derselben API

  3. Command Service zum Zuordnen von WPF-ICommands zu Inhaltsschnittstellen, die nur aktiv werden, wenn eine aktive Ansicht oder ein aktives Ansichtsmodell die Schnittstelle implementiert

  4. Bereichsadapter für Symbolleisten und Menüs

  5. Die Client-Server-Protokollierung ist sofort einsatzbereit

  6. Enthält Module wie einen Webbrowser, einen Texteditor, ein Ausgabefenster und vieles mehr

  7. Registerschnittstelle mit Dirty File-Anzeige (modulübergreifend wiederverwendbar)

nRoute

• Autor: Rishi

• Silverlight-Unterstützung: Ja

• Dokumentation: Viele Artikel im Blog des Autors verfügbar (die Links finden Sie auf der Homepage des CodePlex-Projekts.)

• Hosting: CodePlex

• Lizenz: MS-PL

• Eigenschaften:

  1. unterstützen Blend3-Verhalten und lösen Modelle aus

  2. ressourcen-Locator-Framework

  3. services anzeigen: OpenFileDialog, ShowMessage…

  4. verwendet Attribute, um View und ViewModel zusammen zuzuordnen

Nito MVVM

• Autor: Shammah

• Silverlight-Unterstützung: Nein

• Dokumentation: nein

• Hosting: CodePlex

• Lizenz: nicht angegeben

• Eigenschaften:

  1. verschiedene MVVM-freundliche Implementierungen der ICommand-Schnittstelle

Ozean

• Autor: Karl Shifflet

• Silverlight-Unterstützung: Nein

• Dokumentation: Artikel in Karls Blog verfügbar

• Hosting: persönliche Website

• Lizenz: nicht angegeben

• Eigenschaften:

  1. geschrieben in VB.Net

  2. attributbasierte Validierung

  3. viewmodel Basisklassen: Relaiskommando, schließbaresviewmodell…

  4. SQL Server-Datenzugriffsebene

Grundlegendes MVVM-Framework

• Autor: Lester Lobo

• Silverlight-Unterstützung: Nein

• Dokumentation: Beispielanwendung in der Bibliothek verfügbar

• Hosting: CodePlex

• Lizenz: MS-PL

• Eigenschaften:

  1. delegieren von Commands\Keybinding

  2. nachrichten zwischen VMs

  3. behandeln von Ereignissen als Befehle mit angefügtem Verhalten

  4. umgang mit Dialogen (und mehr) als Services

  5. VS-Code-Schnipsel

GoodLight

• Autor: Peter O’Hanlon • Silverlight-Unterstützung: Ja

• Dokumentation: Beispielanwendung in der Bibliothek verfügbar

• Hosting: CodePlex

• Lizenz: MS-PL

• Eigenschaften:

  1. Verwaltung des Arbeitsbereichs (Dokumentensatz, der geschlossen werden kann)

  2. hautunterstützung

  3. nachrichten zwischen VMs

54
Nasser Hadjloo

Ich versuche die Frameworks zu beschreiben, die in Petes großartiger Antwort fehlen:

MVVM Toolkit (Microsoft) ist eine sehr kompakte Bibliothek mit Visual Studio-Projektvorlagen, mit denen Anfänger unterstützt werden sollten dieses Muster. Wenn Microsoft ein gutes Feedback für sein Toolkit erhält, kann dies als neue Visual Studio-Projektvorlage (möglicherweise 2010) implementiert werden.

Prism (Microsoft p & p) ist ein Framework, das mehr als die Unterstützung für das MVVM-Muster bietet. Das Hauptziel dieses Projekts ist es, Sie beim Erstellen modularer WPF- und/oder Silverlight-Anwendungen zu unterstützen. Wenn Sie nur das MVVM-Muster implementieren müssen oder Anfänger in .NET/WPF sind, empfehle ich dieses Projekt nicht. Siehe auch: Link .

WPF Application Framework (WAF) ist ein kompaktes Framework, mit dem Sie WPF-Apps mit MVVM erstellen können. Es ist nur für WPF und unterstützt daher Silverlight nicht. Es geht ein bisschen anders als die meisten anderen MVVM-Frameworks mit der Einführung von Controllern . Sie sind für den Anwendungsworkflow verantwortlich und vermitteln zwischen verschiedenen ViewModels.

44
jbe

Meh. MVVM benötigt nicht wirklich ein komplettes Framework, um IMO zu unterstützen. Wenn Sie das Konzept verstehen, ist es ziemlich einfach, mit einer sauberen VM Basisklasse zu beginnen, die INotify implementiert, und von dort aus zu beginnen.

19
Pierreten

Siehe auch:

Caliburn & Onyx !

16
rudigrobler

Mischen Sie Ihre eigenen!

Ich habe EventAggregator von PRISM verwendet, mit ViewModelBase von MVVM Foundation und so weiter. Ich habe auch den RelayCommand (DelegateCommand an einigen Stellen aufgerufen) optimiert, um auch andere Daten zu akzeptieren, und so weiter.

Ich würde nicht nur ein Framework per se empfehlen.

10
Andrei Rînea

ich wette auf Caliburn und MVVMlight. Es scheint, dass nicht viele dieser MVVM-Frameworks Silverlight unterstützen. Ich kann mir vorstellen, dass es mehr MVVM-Frameworks als IoC-Frameworks geben wird, da es schwieriger ist, die Feature-Grenze zum MVVM-Framework festzulegen. Ich denke, der beste Weg, um herauszufinden, welches für Ihr Projekt am besten geeignet ist, ist das Auflisten/Vergleichen der Merkmale.

Schauen Sie sich auch Mix10 an. Ich lerne viel aus dem Vortrag: Erstellen Sie Ihr MVVM-Framework.

8
MCSean

Auch Cocktail und DevForce Framework von Ideablade

6
ramon22

Ich benutze Prisma und mag es. Eines der großen Dinge für mich war, dass es andere Leute geben würde, die mir bei Bedarf helfen und gute Beispiele geben könnten. Sobald Sie die Grundlagen zum Laufen gebracht haben, gibt es eine ganze Reihe von Erweiterungen, die Sie für Ihre App benötigen, und es ist viel einfacher, wenn Sie mit demselben Framework wie andere arbeiten.

4
dave

Alles in allem bin ich zu 90% mit meiner Anwendung fertig und habe MVVM Toolkit nur mit der Factory-Funktion verwendet, die einen Befehl für mich erstellt, wenn eine Delegate-Funktion in Execute gestartet wird. Ich denke, ich könnte in ein paar Stunden auf ein anderes oder gar kein Framework umsteigen.

2
mico

Ein weiterer zu berücksichtigender Punkt ist MEFedMVVM . Ich habe es für einige Projekte verwendet und es ist leichtgewichtig, nicht aufdringlich und unterstützt Silverlight und WPF. Es ist auch in der Lage, Entwurfszeitdaten in Blend für diejenigen zu unterstützen, die dieses Produkt verwenden.

2
John Rayner

Wenn Sie Erweiterbarkeit (die Möglichkeit, Add-Ins zu schreiben) auf einem WPF/MVVM-Anwendungsframework suchen, interessieren Sie sich möglicherweise für SoapBox Core Haftungsausschluss: Ich habe es geschrieben . Es ist Open-Sourcing-fähig. Selbst wenn Sie es nicht verwenden, könnte es einige gute Ideen für Sie geben. Es verwendet MEF sowohl für die Erweiterbarkeit als auch für die IoC.

1
Scott Whitlock

Es gibt auch nRoute

Ein wirklich nettes Anwendungsframework für WPF/Silverlight, das MVVM unterstützt

1
Daniel O