Welchen Rahmen für MVVM sollte ich verwenden?

Ich entwickle eine Anwendung mit dem MVVM-Modell, aber ich habe einen Punkt erreicht, an dem ich auswählen muss, welches Framework verwendet werden soll.

Zu den möglichen Optionen gehören:

  • MVVM-Toolkit
  • MVVM-Stiftung
  • WPF-Anwendungsrahmen (WAF)
  • Leichtes MVVM
  • Caliburn
  • Cinch
  • Prisma

Was ist deiner Erfahrung nach besser?

Es hängt wirklich davon ab, was Sie zu erreichen versuchen, und wie viel Infrastruktur Sie bereits an Ort und Stelle haben, plus die Leichtigkeit, mit der Sie Beispiele finden können, die Ihnen helfen. Ich werde hier ein Interesse anmelden, weil ich aktiv an mindestens einem MVVM-Framework beteiligt war und über die WPF Disciples-Gruppe in andere involviert war, also bin ich ein bisschen voreingenommen. Das sagend, hier geht:

Microsofts MVVM Toolkit – das ist immer noch sehr im Alpha-Stadium. Als es ursprünglich veröffentlicht wurde, brauchte es etwas von den Jüngern wegen dessen, was es nicht tat. Mit der Aussage, dass MS dieses Framework auffrischen will, ist es ein Muss – es ist noch nicht fertig.

MVVM Foundation – ah Josh Smiths Version des Frameworks. Josh ist einer der Daddys von MVVM und war ein großer Verfechter und Lehrer des Musters. Als Ergebnis enthält viel von dem, was Sie in anderen Frameworks finden, Joshs Fingerabdrücke. Dieser Rahmen soll die Grundlagen von MVVM liefern und nicht einige der esoterischen Probleme angehen. Ursprünglich war dies nur für WPF gedacht, aber Leute wie Laurent Bugnion und ich haben functionalität / Projekte hinzugefügt, was bedeutet, dass dies auch ein Silverlight-kompatibles Framework sein wird.

WAF – keine Erfahrung davon, also kann ich nichts dazu sagen, fürchte ich.

MVVM Light – Laurent Bugnion hat es übernommen und gerade auf Version 2 aktualisiert. Dies ist ein sehr guter Rahmen, aber es ist auch nicht beabsichtigt, jeden einzelnen Aspekt von MVVM-Anwendungen abzudecken. Angesichts des Hintergrunds von Laurent verfügt es über sehr starke Silverlight- und Blendability-Unterstützung.

Update Laurent hat mir gerade mitgeteilt, dass die Versionen .NET 3.5 und .NET 4.0 Feature-kompatibel sind. Wau, Laurent zu gehen.

Cinch – Sacha Barbers exzellentes WPF-MVVM-Framework. Dies deckt mehr Boden ab als die Frameworks, über die ich oben gesprochen habe. Es ist ein exzellenter Rahmen und nutzt die Konzepte von Bill Kempfs ausgezeichnetem Onyx- Projekt. Onyx soll MVVM-Frameworks ergänzen und functionen hinzufügen, die für MVVM / WPF in der Regel schwierig sind. Ursprünglich nur für WPF gedacht, hat sich Onyx nun auch für die SL-Kompatibilität entschieden – eine Arbeit, auf die ich besonders stolz bin.

Prism – Ich habe es noch nie benutzt, aber ich habe viele gute Dinge darüber gehört.

Ocean – Karl Shifflett, Programm-Manager des Cider-Teams, hat kürzlich ein voll funktionsfähiges WPF MVVM-Framework veröffentlicht. Auch dies ist ein ausgezeichneter Rahmen und es gibt viel zu empfehlen.

Die Quintessenz ist, laden Sie die verschiedenen Frameworks, schauen Sie sie an und erarbeiten Sie, welches am intuitivsten mit Ihrer Denkweise und Ihren Anforderungen zusammenpasst. Wenn Sie der Meinung sind, dass Sie Silverlight unter Umständen von derselben Codebasis aus unterstützen möchten, sollten die WPF-Frameworks nur mit einem Preisnachlass versehen werden.

Ich fand diesen Artikel sehr nützlich http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ So dass ich es hier für kommende Benutzer bringen

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

Es tut mir leid für die lange Geschichte

Gemeinsamkeiten:

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

• RelayCommand wie die class, um den UI-Befehl mit den Handlern von ViewModel zu verknüpfen

• Komponententests werden mit dem Framework geliefert

Cinch

• Autor: Sacha Barber

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

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

• Hosting: CodePlex

• Lizenz: Code Project Open Lizenz

• Eigenschaften:

  1. angefügte Verhaltensweisen

  2. validation 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: Ereignislogger, Meldungsfeld, Dialog zum Öffnen von Speichern, Popup

  8. Einfädelhelfer

  9. Unterstützung für Menüpunkte

  10. verschließbare Viewmodels

  11. MVVM-Codegenerator

MVVM Light Toolkit

• Autor: Laurent Bugnion

• Silverlight-Unterstützung: Ja

• Dokumentation: viele Artikel auf Laurents Blog und andere Entwickler

• Hosting: CodePlex

• Lizenz: MIT-Lizenz

• Eigenschaften:

  1. MSI-Installationsprogramm

  2. VS Projekt- und Artikelvorlage

  3. VS-Code-Schnipsel

  4. Messenger-System für Inter-View-Model-Kommunikation

  5. Ereignisse als Befehle behandeln

MVVM Helfer

• Autor: Mark Smith

• Silverlight-Unterstützung: Nein

• Dokumentation: einige Artikel auf Marks Blog

• Hosting: persönliche Website

• Lizenz: nicht definiert

• Eigenschaften:

  1. angefügte Verhaltensweisen

  2. Viewmodel-Erstellung mit Markup-Erweiterung

  3. Attributbasierte validation

  4. IOC / DI verwendet den ServiceProvider-Ansatz

  5. verschließbares Viewmodel

  6. Warte den Cursor (mit dem neuen WaitCursor () {// Dein Code hier})

MVVM-Stiftung

• Autor: Josh Smith

• Silverlight-Unterstützung: Nein

• Dokumentation: Artikel über die Messenger-Implementierung auf Joshs oder Marlon Grechs Blog

• Hosting: CodePlex

• Lizenz: MS-PL

• Eigenschaften:

  1. Messenger-System für Inter-View-Model-Kommunikation

  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 sind auf Actions aufgebaut und teilen daher viele der gleichen functionen, einschließlich mehrerer Eingabeparameter, Filter und automatischer asynchroner Ausführung

  2. Moderatoren, die Probleme mit dem UI-Lebenszyklus behandeln, wie z. B. die Handhabung der Semantik von Aktivierung, Deaktivierung und Herunterfahren für verschiedene UI-Komponenten

  3. Caliburn-Anwendungen sind vollständig testbar

  4. verschiedene Dienstprogramme wie ein Hintergrundaufgabenmanager

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

  6. Abhängigkeitsinjektionsbehälter

Onyx

• Autor: William e Kempf

• Silverlight-Unterstützung: Nein

• Dokumentation: Grundlegende Einführung auf CodePlex

• Hosting: CodePlex

• Lizenz: nicht angegeben

• Eigenschaften:

  1. ServiceLocator-Muster

  2. ViewModel-Erstellung mit einer benutzerdefinierten Markuperweiterung

  3. UI-bezogene Dienste wie IDisplayMessage

Kalzium

• Autor: Daniel Vaughan

• Silverlight-Unterstützung: Nein

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

• Hosting: CodePlex

• Lizenz: verwenden, kopieren, ändern und / oder verteilen und behalten Sie das Copyright!

• Eigenschaften:

  1. Module Manager zum Aktivieren oder Deaktivieren von Modulen zur Laufzeit

  2. Messaging-Dienste für die Interaktion mit dem Benutzer vom Client oder Server mit derselben API

  3. Command Service, um WPF ICommands mit Inhaltsschnittstellen zu verknüpfen, die erst aktiv werden, wenn eine aktive Ansicht oder ein Viewmodel die Schnittstelle implementiert

  4. Regionsadapter für ToolBars und Menüs

  5. Client-Server-Protokollierung bereit für die Out-of-the-Box-Arbeit

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

  7. Tabbed Interface mit Dirty File Indication (wiederverwendbar über Module)

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ützt Blend3-Verhaltensweisen und triggers Modelle aus

  2. Ressourcen-Locator-Framework

  3. Ansichtsdienste: OpenFileDialog, ShowMessage …

  4. verwendet Attribute, um View und ViewModel zusammen zu bilden

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 auf Karls Blog verfügbar

• Hosting: persönliche Website

• Lizenz: nicht angegeben

• Eigenschaften:

  1. geschrieben in VB.Net

  2. Attributbasierte validation

  3. Viewmodel-Basisklassen: relaycommand, closeableviewmodel …

  4. SQL Server-Datenzugriffsschicht

Grundlegendes MVVM-Framework

• Autor: Lester Lobo

• Silverlight-Unterstützung: Nein

• Dokumentation: Beispielanwendung, die mit der Bibliothek verfügbar ist

• Hosting: CodePlex

• Lizenz: MS-PL

• Eigenschaften:

  1. Delegieren von Befehlen \ Keybinding

  2. Messaging zwischen VMs

  3. Ereignisse als Befehle mit angehängtem Verhalten behandeln

  4. Umgang mit Dialogen (und mehr) als Dienste

  5. VS-Code-Schnipsel

Gutes Licht

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

• Dokumentation: Beispielanwendung, die mit der Bibliothek verfügbar ist

• Hosting: CodePlex

• Lizenz: MS-PL

• Eigenschaften:

  1. “Workspace” management (Dokumentensatz, der geschlossen werden kann)

  2. Hautunterstützung

  3. Messaging zwischen VMs

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

MVVM Toolkit (Microsoft) ist eine sehr leichte Bibliothek mit Visual Studio-Projektvorlagen, die Anfänger mit diesem Muster unterstützen sollten. Wenn Microsoft ein gutes Feedback für das Toolkit erhält, wird es möglicherweise als neue Projektvorlage für Visual Studio (möglicherweise 2010) implementiert.

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, Ihnen beim Erstellen modularer WPF- und / oder Silverlight-Anwendungen zu helfen. Wenn Sie nur das MVVM-Muster implementieren müssen oder Anfänger in .NET / WPF sind, werde ich dieses Projekt nicht empfehlen. Siehe auch: Link .

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

Meh. Mvvm benötigt kein vollständiges 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 einfach weitergeht.

Siehe auch:

Caliburn & Onyx !

Mischen Sie Ihre eigenen!

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

Ich würde nicht nur einen Rahmen an sich empfehlen.

Meine Wette wird auf Caliburn und MVVMlight sein, es scheint, dass nicht viele dieser MVVM-Frameworks Silverlight unterstützen. Ich kann vorhersehen, dass es mehr MVVM-Frameworks als die IoC-Frameworks geben wird, da es schwieriger ist, die Feature-Grenze für das mvvm-Framework einzurichten. Ich denke, der beste Weg herauszufinden, welcher für Ihr Projekt besser geeignet ist, ist das Auflisten / Vergleichen ihrer functionen.

Schau dir auch Mix10 an. Ich lerne viel aus dem Gespräch: Aufbau Ihres mvvm-Frameworks.

Auch Cocktail und DevForce Framework von Ideablade

Ich benutze Prism und mag es. Eines der großen Dinge für mich war, dass es da draußen andere Leute geben würde, die mir helfen könnten, wenn nötig und gute Beispiele. Sobald Sie die Grundlagen in die Praxis umgesetzt haben, gibt es eine ganze Reihe von Erweiterungen, die Sie für Ihre App benötigen, und es ist einfach so viel einfacher, wenn Sie mit demselben Framework arbeiten wie andere.

Alles in allem bin ich 90% durch meine Anwendung und alles, was ich von MVVM Toolkit verwendet habe, ist die Factory-function, die einen Befehl für mich erstellt, da eine Delegate-function in Execute gestartet wird. Ich denke, ich könnte in ein paar Stunden zu irgendeinem anderen Rahmen oder keinem Rahmen wechseln.

Ein anderer zu betrachtender ist MEFedMVVM . Ich habe es in ein paar Projekten verwendet und es ist leicht, 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.

Wenn Sie nach Extensibility (die Fähigkeit, Add-Ins zu schreiben) auf einem WPF / MVVM-Anwendungsframework suchen , dann könnte Sie der Haftungsausschluss von SoapBox Core interessieren : Ich habe ihn geschrieben . Es ist Open Source, also auch wenn Sie es nicht verwenden, es könnte einige gute Ideen für Sie geben. Es verwendet MEF für Erweiterbarkeit und IoC.

Es gibt auch nRoute

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