Welches Framework für MVVM soll ich verwenden? [geschlossen]

233

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

Zu den möglichen Optionen gehören:

  • MVVM Toolkit
  • MVVM Foundation
  • WPF Application Framework (WAF)
  • Leichte MVVM
  • Caliburn
  • Cinch
  • Prisma
  • ReactiveUI

Was ist Ihrer Erfahrung nach besser?

Rangel
quelle
14
+1 - Gute Frage, aber bitte klären Sie "besser". Unterschiedliche Frameworks bieten unterschiedliche Vorteile. Das Beste hängt von Ihren Anforderungen ab. Freuen Sie sich auf die Antworten :)
Russell
Nun, es wäre sehr gut, dass Sie mit WPF und Silverlight und mit einer minimalen Lernkurve verwenden können.
Rangel
2
Vielleicht möchten Sie auch Caliburn ausprobieren. codeplex.com/caliburn
Kent Boogaart
Entschuldigung Kent. Wie könnte ich Caliburn vergessen?
Pete OHanlon
2
Nah und alt, aber ... Ich habe mein erstes Projekt mit Prism (Antwort unten) durchgeführt, da ich Komponentenunterstützung benötige. Mein letztes Projekt habe ich roh gemacht - überhaupt kein Framework. Alles, was Sie brauchen, ist eine Befehlsklasse, und Sie können MVVM ohne Framework ausführen - das ist ungefähr so ​​leicht wie möglich.
Dave

Antworten:

194

Es hängt wirklich davon ab, was Sie erreichen möchten und wie viel Infrastruktur Sie bereits benötigen, sowie von der Leichtigkeit, mit der Sie Beispiele finden können, die Ihnen helfen. Ich werde hier ein Interesse anmelden, da ich aktiv an mindestens einem MVVM-Framework beteiligt war und über die WPF Disciples-Gruppe Beiträge zu anderen geleistet habe, daher bin ich ein bisschen voreingenommen. Das heißt hier:

Microsoft MVVM Toolkit - dies befindet sich noch im Alpha-Stadium. Als es ursprünglich veröffentlicht wurde, war es den Jüngern ein bisschen grausam, weil es nicht tat. Mit diesen Worten möchte MS dieses Framework verbessern, damit es zu sehen ist - es ist einfach noch nicht fertig.

MVVM Foundation - ah Josh Smiths Version des Frameworks. Josh ist einer der Väter von MVVM und war ein großer Verfechter und Lehrer des Musters. Infolgedessen weist vieles, 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 ansprechen. 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 sein wird.

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, aber auch hier ist nicht beabsichtigt, jeden einzelnen Aspekt von MVVM-Anwendungen abzudecken. Angesichts des Hintergrunds von Laurent bietet es eine sehr starke Unterstützung für Silverlight und Blendability.

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

Cinch - Sacha Barbers exzellentes MVVM-Framework nur für WPF. Dies deckt mehr Bereiche ab als die Rahmenbedingungen, über die ich oben gesprochen habe. Es ist ein ausgezeichnetes Framework und nutzt die Konzepte von Bill Kempfs ausgezeichnetem Onyx- Projekt. Onyx soll MVVM-Frameworks ergänzen und Funktionen hinzufügen, die für Benutzer in MVVM / WPF normalerweise schwierig sind. Onyx, ursprünglich nur für WPF gedacht, hat die SL-Kompatibilität wieder aufgenommen - eine Arbeit, an der ich besonders stolz bin.

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

Ocean - Karl Shifflett, Programmmanager im Cider-Team, hat kürzlich ein voll funktionsfähiges WPF MVVM-Framework veröffentlicht. Auch dies ist ein ausgezeichneter Rahmen und hat viel zu empfehlen.

Unter dem Strich 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 Silverlight aus derselben Codebasis unterstützen möchten, sollten die WPF-Frameworks nur rabattiert werden.

Pete OHanlon
quelle
4
Ich benutze eine, die wir geschrieben haben, weil wir sehr spezielle Bedürfnisse für MVVM haben. Es ist stark von der Arbeit beeinflusst, die Josh geleistet hat, und ich werde es in naher Zukunft als Open Source veröffentlichen (ich bin damit beschäftigt, die proprietären Teile herauszureißen). Es heißt Goldlight.
Pete OHanlon
Was ist Ihr Datenzugriffsschicht-Framework? Jungs .. LINQ, LLBLGen, EF, nHibernate?
Jirapong
Das hängt vom Projekt und den Anforderungen ab. Manchmal verwenden wir LINQ, manchmal NHibernate, manchmal Castle ActiveRecord und manchmal eXpress Persistent Objects.
Pete OHanlon
3
Hallo Pete, ich möchte nur kommentieren, dass das MVVM Light Toolkit für WPF 3.5 und WPF 4 genauso funktioniert wie für Silverlight 3 und Silverlight 4. Ich bin darauf bedacht, die Funktionen so weit wie möglich synchron zu halten. Sie haben Recht mit der Mischbarkeit, dies ist ein wichtiges Anliegen für mich :) Prost, Laurent
LBugnion
1
Ich war enttäuscht, dass MVVM Toolkit nicht für die Verwendung mit Visual Studio 2010 aktualisiert wurde. Vielleicht möchten Sie dies dem Entscheidungsprozess hinzufügen. Die meisten Leute, von denen ich weiß, dass sie MVVM-Vorlagen im Jahr 2010 verwenden, verwenden MVVM Light, und einige sind allein aus diesem Grund darauf migriert.
ScottCher
54

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 kommende Benutzer hierher bringe

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

Die lange Geschichte tut mir leid

Gemeinsamkeiten:

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

• RelayCommand like-Klasse zum Verknüpfen des UI-Befehls mit den ViewModel-Handlern

• 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 auf 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 schwacher Ereignisse

  5. Mediator Messaging mit schwachen Ereignissen

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

  7. Dienste: Ereignisprotokollierer, Meldungsfeld, Dialogfeld zum Speichern öffnen, Popup

  8. Threading-Helfer

  9. Unterstützung für Menüpunkte

  10. schließbare Ansichtsmodelle

  11. MVVM-Codegenerator

MVVM Light Toolkit

• Autor: Laurent Bugnion

• Silverlight-Unterstützung: Ja

• Dokumentation: Viele Artikel sind auf Laurents Blog und anderen Entwicklern verfügbar

• Hosting: CodePlex

• Lizenz: MIT-Lizenz

• Eigenschaften:

  1. MSI-Installationsprogramm

  2. VS Projekt- und Artikelvorlage

  3. VS-Codefragmente

  4. Messenger-System 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 mit ServiceProvider-Ansatz

  5. schließbares Ansichtsmodell

  6. Warte-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. Messenger-System 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 bauen auf Aktionen auf und haben daher viele der gleichen Funktionen, einschließlich mehrerer Eingabeparameter, Filter und automatischer asynchroner Ausführung

  2. Präsentatoren, die Probleme mit dem UI-Lebenszyklus behandeln, z. B. die Semantik für Aktivierung, Deaktivierung und Herunterfahren 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ängigkeitsinjektionsbehälter

Onyx

• Autor: William e Kempf

• Silverlight-Unterstützung: Nein

• Dokumentation: Grundlegende Einführung in CodePlex verfügbar

• Hosting: CodePlex

• Lizenz: nicht angegeben

• Eigenschaften:

  1. ServiceLocator-Muster

  2. ViewModel-Erstellung mit einer benutzerdefinierten Markup-Erweiterung

  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 Urheberrecht!

• Eigenschaften:

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

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

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

  4. Regionsadapter für Symbolleisten und Menüs

  5. Client-Server-Protokollierung sofort einsatzbereit

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

  7. Registerkarte mit Registerkarten und Anzeige schmutziger Dateien (modulübergreifend wiederverwendbar)

nRoute

• Autor: Rishi

• Silverlight-Unterstützung: Ja

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

• Hosting: CodePlex

• Lizenz: MS-PL

• Eigenschaften:

  1. unterstützt Blend3-Verhalten und löst Modelle aus

  2. Resource Locator Framework

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

• Hosting: persönliche Website

• Lizenz: nicht angegeben

• Eigenschaften:

  1. geschrieben in VB.Net

  2. Attributbasierte Validierung

  3. Viewmodel-Basisklassen: RelayCommand, Closeableviewmodel…

  4. SQL Server-Datenzugriffsschicht

Grundlegendes MVVM-Framework

• Autor: Lester Lobo

• Silverlight-Unterstützung: Nein

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

• Hosting: CodePlex

• Lizenz: MS-PL

• Eigenschaften:

  1. Befehle delegieren \ Keybinding

  2. Messaging zwischen VMs

  3. Behandeln von Ereignissen als Befehle mit angehängten Verhaltensweisen

  4. Dialoge (und mehr) als Dienste behandeln

  5. VS-Codefragmente

Gutes Licht

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

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

• Hosting: CodePlex

• Lizenz: MS-PL

• Eigenschaften:

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

  2. Hautunterstützung

  3. Messaging zwischen VMs

Nasser Hadjloo
quelle
Guter Eintrag. Ich dachte nur, ich würde hinzufügen, dass Cinch Version 2 Silverlight unterstützt.
Kildareflare
44

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

MVVM Toolkit (Microsoft) ist eine sehr einfache Bibliothek mit Visual Studio-Projektvorlagen, die Anfänger mit diesem Muster unterstützen sollen. Wenn Microsoft ein gutes Feedback für sein Toolkit erhält, wird es möglicherweise als neue Visual Studio-Projektvorlage (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-Anwendungenzu 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 leichtes Framework, mit dem Sie WPF-Apps mit MVVM erstellen können. Es ist nur für WPF und unterstützt daher Silverlight nicht. Mit der Einführung von Controllern geht es etwas anders als bei den meisten anderen MVVM-Frameworks. Sie sind für den Anwendungsworkflow verantwortlich und vermitteln zwischen verschiedenen ViewModels.

jbe
quelle
19

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 einfach von dort fortzufahren.

Pierreten
quelle
4
Es gibt einen Grund, warum viele Entwickler die MVVM-Bibliothek entwickeln. Wenn das, was Sie sagen, wahr ist, warum sollten diese Entwickler dann ihre Zeit verschwenden? Warum sollten Benutzer dieser Frameworks weiterhin ihr bevorzugtes mvvm-Framework verwenden? Richtig, "Mvvm benötigt nicht wirklich ein komplettes Framework, um IMO zu unterstützen". Es ist jedoch nicht praktisch, auf das MVVM-Framework zu verzichten.
Syaiful Nizam Yahya
3
-1 IMO, das Ihre eigene RelayCommand-Klasse für ICommands, eine Messenger-Klasse für die Kommunikation zwischen VMs und Ihren eigenen IoC-Container schreibt, um nur die grundlegendsten Tools zu nennen, die für eine gut funktionierende WPF-Anwendung erforderlich sind, ist eine wichtige PITA. Ihre Antwort gilt nur für die einfachsten Programme.
Heliac
10

Mischen Sie Ihre eigenen!

Ich habe EventAggregator von PRISM verwendet, 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.

Andrei Rînea
quelle
19
Ich bin mit Respekt anderer Meinung, das Problem mit diesem Ansatz wird sich zeigen, wenn Sie neue Tischler bekommen - die Kosten für den Eintritt in das Projekt werden viel höher sein, da die internen Dokumente im Allgemeinen nicht die Priorität haben.
Florian Doyon
1
Ich kann den Punkt über Dokumentation sehen. Aber es besteht möglicherweise keine Notwendigkeit, interne Dokumente zu entwickeln. Links zu den externen Sites mit der Dokumentation können in den Code selbst eingebettet werden
Vasudevan Kannan
8

Ich wette auf Caliburn und MVVMlight. Es scheint, dass nicht viele dieser MVVM-Frameworks Silverlight unterstützen. Ich kann davon ausgehen, dass mehr MVVM-Frameworks zur Auswahl stehen als die IoC-Frameworks, da es schwieriger ist, die Feature-Grenze zum mvvm-Framework festzulegen. Ich denke, der beste Weg, um herauszufinden, welches besser zu Ihrem Projekt passt, ist das Auflisten / Vergleichen der Funktionen.

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

MCSean
quelle
4
Ich fand dieses Gespräch sehr nützlich. Hier ist ein direkter Link: live.visitmix.com/MIX10/Sessions/EX15
anshul
6

Auch Cocktail und DevForce Framework von Ideablade

ramon22
quelle
4

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 könnten, und gute Beispiele. Sobald Sie die Grundlagen zum Laufen gebracht haben, benötigen Sie eine ganze Reihe von Erweiterungen für Ihre App, und es ist viel einfacher, wenn Sie mit demselben Framework wie andere arbeiten.

Dave
quelle
2

Alles in allem bin ich zu 90% durch meine Anwendung und alles, was ich von MVVM Toolkit verwendet habe, ist die Factory-Funktion, die einen Befehl für mich erstellt, der eine Delegate-Funktion zum Starten in Execute enthält. Ich denke, ich könnte in ein paar Stunden zu einem anderen Framework oder keinem Framework wechseln.

mico
quelle
2

Ein weiterer zu berücksichtigender Punkt ist MEFedMVVM . Ich habe es für einige Projekte 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.

John Rayner
quelle
1

Wenn Sie nach Erweiterbarkeit (der Möglichkeit zum Schreiben von Add-Ins) über einem WPF / MVVM-Anwendungsframework suchen, ist der Haftungsausschluss von SoapBox Core möglicherweise für Sie von Interesse : Ich habe ihn geschrieben . Es ist Open Source, und selbst wenn Sie es nicht verwenden, gibt es möglicherweise einige gute Ideen für Sie. Es verwendet MEF sowohl für Extensibility als auch für IoC.

Scott Whitlock
quelle
1

Es gibt auch nRoute

Ein wirklich schönes Anwendungsframework für WPF / Silverlight, das MVVM unterstützt

Daniel O.
quelle