Quale framework per MVVM dovrei usare? [chiuso]


233

Sto sviluppando un'applicazione con il modello MVVM, ma ho raggiunto un punto in cui devo scegliere quale framework utilizzare.

Tra le possibili opzioni ci sono:

  • MVVM Toolkit
  • Fondazione MVVM
  • WPF Application Framework (WAF)
  • MVVM leggero
  • Caliburn
  • straccale
  • Prisma
  • ReactiveUI

Nella tua esperienza, qual è la migliore?


14
+1 - Buona domanda, ma chiarisci "meglio". Diversi framework offrono diversi vantaggi, il meglio dipende dalle tue esigenze. Attendo con ansia le risposte :)
Russell,

Bene, sarebbe molto buono che tu possa usare con WPF e Silverlight e con una curva di apprendimento minima.
Rangel,

2
Potresti voler dare un'occhiata anche a Caliburn. codeplex.com/caliburn
Kent Boogaart,

Scusa Kent. Come potrei dimenticare Caliburn?
Pete OHanlon,

2
Vecchio e vicino ma ... Ho fatto il mio primo progetto usando Prism (risposta sotto) poiché ho bisogno del supporto dei componenti. Il mio ultimo progetto l'ho fatto crudo - nessun quadro. Tutto ciò di cui hai bisogno è una classe di comando e puoi fare MVVM senza un framework: si tratta di un peso leggero che puoi ottenere.
Dave,

Risposte:


194

Dipende molto da ciò che stai cercando di ottenere e da quanta infrastruttura desideri già in atto, oltre alla facilità con cui puoi trovare campioni che ti possano aiutare. Dichiarerò un interesse qui, perché sono stato attivamente coinvolto in almeno un framework MVVM e ho avuto input in altri attraverso il gruppo WPF Disciples, quindi sono un po 'di parte. Detto questo, ecco qui:

Microsofts MVVM Toolkit - questo è ancora molto nelle fasi alfa. Quando è stato originariamente rilasciato, ci è voluto un po 'di selvaggio dai Discepoli a causa di ciò che non ha fatto. Detto questo, MS sta cercando di rinforzare questo quadro, quindi è uno da guardare - non è ancora pronto.

Fondazione MVVM - ah la versione del framework di Josh Smith. Josh è uno dei papà di MVVM ed è stato un grande sostenitore e insegnante del modello. Di conseguenza, molto di ciò che troverai in altri framework ha le impronte digitali di Josh dappertutto. Questo framework ha lo scopo di fornire le basi di MVVM e non di affrontare alcune delle questioni più esoteriche. Inizialmente questo era destinato solo a WPF, ma persone come Laurent Bugnion e io abbiamo aggiunto funzionalità / progetti che significano che questo sarà anche un framework compatibile con Silverlight.

WAF - nessuna esperienza, quindi non posso commentarlo, temo.

MVVM Light : la versione di Laurent Bugnion è appena stata aggiornata alla versione 2. Questo è un ottimo framework, ma ancora una volta non è destinato a coprire ogni singolo aspetto delle applicazioni MVVM. Dato il background di Laurent, ha un supporto Silverlight e Blendability molto forte.

Aggiornamento Laurent mi ha appena informato che le versioni .NET 3.5 e .NET 4.0 sono compatibili con le funzionalità. Wau per andare a Laurent.

Cinch: l'eccellente framework MVVM solo per WPF di Sacha Barber. Questo copre più terreno rispetto ai framework di cui ho parlato sopra. È un quadro eccellente e sfrutta i concetti trattati nell'eccellente progetto Onyx di Bill Kempf . Onyx è pensato per integrare i framework MVVM e aggiunge funzionalità che in genere è stato difficile per le persone fare in MVVM / WPF. Ancora una volta, originariamente destinato a essere solo WPF, Onyx ha continuato a includere la compatibilità SL - lavoro di cui sono particolarmente orgoglioso di essere stato coinvolto.

Prisma - Ancora una volta, non l'ho mai usato, ma ho sentito molte cose positive al riguardo.

Ocean - Karl Shifflett, Program Manager del team Cider, ha recentemente rilasciato un framework MVPM WPF con funzionalità complete. Ancora una volta, questo è un quadro eccellente e ha molto da consigliare.

La linea di fondo è, scaricare i diversi framework, dare un'occhiata a loro e capire quale si adatta più intuitivamente al modo in cui pensi e alle tue esigenze. Se ritieni di voler supportare Silverlight dalla stessa base di codice, i soli framework WPF dovrebbero essere scontati.


4
Ne uso uno che abbiamo scritto, perché abbiamo esigenze molto specialistiche per MVVM. È fortemente influenzato dal lavoro svolto da Josh e lo rilascerò come Open Source nel prossimo futuro (sono impegnato a strappare i bit proprietari). Si chiama Goldlight.
Pete OHanlon,

Insieme a questo, qual è il tuo framework di livello di accesso ai dati? ragazzi .. LINQ, LLBLGen, EF, nHibernate?
Jirapong,

Dipende dal progetto e dai requisiti. A volte utilizziamo LINQ, a volte NHibernate, a volte Castle ActiveRecord e a volte eXpress Persistent Objects.
Pete OHanlon,

3
Ciao Pete, voglio solo commentare che MVVM Light Toolkit funziona allo stesso modo per WPF 3.5 e WPF 4 come per Silverlight 3 e Silverlight 4. Faccio attenzione a mantenere le funzionalità il più possibile sincronizzate. Hai ragione sulla miscelabilità, questa è una grande preoccupazione per me :) Saluti, Laurent
LBugnion

1
Sono stato deluso dal fatto che MVVM Toolkit non sia stato aggiornato per funzionare con Visual Studio 2010. Potrebbe voler aggiungerlo al processo decisionale. La maggior parte delle persone che conosco utilizzando i modelli MVVM entro il 2010 utilizzano MVVM Light e alcuni sono migrati solo per questo motivo.
ScottCher,

54

Ho trovato questo articolo molto utile http://www.japf.fr/2009/10/a-quick-tour-of-existing-mvvm-frameworks/ In modo che lo porti qui per i prossimi utenti

Aggiorno la sezione Cinch e aggiungo il supporto di Silverlight alle sue funzionalità

Mi dispiace per la lunga storia

Caratteristiche comuni:

• Classe ViewModelBase (per l'implementazione dell'interfaccia INotifyPropertyChanged)

• RelayCommand come classe per collegare il comando UI ai gestori di ViewModel

• I test unitari vengono forniti con il framework

straccale

• Autore: Sacha Barber

• Supporto Silverlight: no (la versione 2 di Cinch supporta Silverlight)

• Documentazione: eccellente, 6 articoli pubblicati su CodeProject

• Hosting: CodePlex

• Licenza: Licenza Open Code Project

• Caratteristiche:

  1. comportamenti collegati

  2. validazione usando IDataErrorInfo

  3. supporto per IEditableObject

  4. creazione e sottoscrizione di eventi deboli

  5. messaggistica mediatore che utilizza eventi deboli

  6. Supporto IOC / DI (utilizzando Unity)

  7. servizi: registratore di eventi, finestra di messaggio, finestra di dialogo di salvataggio aperta, popup

  8. aiutanti di threading

  9. supporto per le voci di menu

  10. modelli chiudibili

  11. Generatore di codice MVVM

MVVM Light Toolkit

• Autore: Laurent Bugnion

• Supporto Silverlight: sì

• Documentazione: molti articoli disponibili sul blog di Laurent + anche altri sviluppatori

• Hosting: CodePlex

• Licenza: licenza MIT

• Caratteristiche:

  1. Programma di installazione MSI

  2. Progetto VS e modello di articolo

  3. Frammenti di codice VS.

  4. Sistema Messenger per la comunicazione tra modelli

  5. Gestione degli eventi come comandi

MVVM Helpers

• Autore: Mark Smith

• Supporto Silverlight: no

• Documentazione: alcuni articoli sul blog di Mark

• Hosting: sito Web personale

• Licenza: non definita

• Caratteristiche:

  1. comportamenti collegati

  2. creazione di viewmodel usando l'estensione markup

  3. convalida basata sugli attributi

  4. IOC / DI utilizzando l'approccio ServiceProvider

  5. modello chiudibile

  6. aspetta cursore (usando il nuovo WaitCursor () {// qui il tuo codice})

Fondazione MVVM

• Autore: Josh Smith

• Supporto Silverlight: no

• Documentazione: articoli sull'implementazione di Messenger sul blog di Josh o Marlon Grech

• Hosting: CodePlex

• Licenza: MS-PL

• Caratteristiche:

  1. Sistema Messenger per la comunicazione tra modelli

  2. PropertyChanged event monitor

Caliburn

• Autore: Rob Eisenberg

• Supporto Silverlight: sì

• Documentazione: documentazione online completa disponibile

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

• Licenza: licenza MIT

• Caratteristiche:

  1. i comandi si basano su Actions e condividono quindi molte delle stesse funzionalità, inclusi più parametri di input, filtri ed esecuzione automatica asincrona

  2. relatori che gestiscono il problema del ciclo di vita dell'interfaccia utente come la gestione della semantica di attivazione, disattivazione e arresto per vari componenti dell'interfaccia utente

  3. Le applicazioni di Caliburn sono completamente testabili

  4. varie utility come un task manager in background

  5. supporta vari modelli di interfaccia utente (non solo MVVM)

  6. contenitore per iniezione di dipendenza

Onice

• Autore: William e Kempf

• Supporto Silverlight: no

• Documentazione: introduzione di base disponibile su CodePlex

• Hosting: CodePlex

• Licenza: non specificato

• Caratteristiche:

  1. Modello ServiceLocator

  2. Creazione di ViewModel usando un'estensione di markup personalizzata

  3. Servizi correlati all'interfaccia utente come IDisplayMessage

Calcio

• Autore: Daniel Vaughan

• Supporto Silverlight: no

• Documentazione: 2 articoli molto dettagliati su CodeProject (parte 1 e parte 2)

• Hosting: CodePlex

• Licenza: utilizzare, copiare, modificare e / o distribuire e conservare il copyright!

• Caratteristiche:

  1. Gestione moduli per abilitare o disabilitare i moduli in fase di esecuzione

  2. servizi di messaggistica per l'interazione con l'utente dal client o dal server utilizzando la stessa API

  3. Servizio di comando per associare i comandi IC di WPF a interfacce di contenuto che diventano attive solo quando una vista attiva o un modello di visualizzazione implementano l'interfaccia

  4. Adattatori di regione per barre degli strumenti e menu

  5. Registrazione client-server pronta per l'uso immediato

  6. Include moduli, come un browser Web, un editor di testo, una finestra di output e molti altri

  7. Interfaccia a schede con indicazione di file sporco (riutilizzabile tra i moduli)

nRoute

• Autore: Rishi

• Supporto Silverlight: sì

• Documentazione: molti articoli disponibili sul blog dell'autore (per i collegamenti vedere la home page del progetto CodePlex)

• Hosting: CodePlex

• Licenza: MS-PL

• Caratteristiche:

  1. supporta comportamenti Blend3 e innesca modelli

  2. framework di localizzazione delle risorse

  3. visualizza i servizi: OpenFileDialog, ShowMessage ...

  4. utilizza gli attributi per mappare View e ViewModel insieme

Nito MVVM

• Autore: Shammah

• Supporto Silverlight: no

• Documentazione: no

• Hosting: CodePlex

• Licenza: non specificato

• Caratteristiche:

  1. varie implementazioni compatibili con MVVM dell'interfaccia ICommand

Oceano

• Autore: Karl Shifflet

• Supporto Silverlight: no

• Documentazione: articoli disponibili sul blog di Karl

• Hosting: sito Web personale

• Licenza: non specificato

• Caratteristiche:

  1. scritto in VB.Net

  2. convalida basata sugli attributi

  3. classi base viewmodel: relaycommand, closeableviewmodel ...

  4. Livello di accesso ai dati del server SQL

Framework MVVM di base

• Autore: Lester Lobo

• Supporto Silverlight: no

• Documentazione: applicazione di esempio disponibile con la libreria

• Hosting: CodePlex

• Licenza: MS-PL

• Caratteristiche:

  1. delegare i comandi \ Keybinding

  2. messaggistica tra VM

  3. gestire gli eventi come comandi con comportamenti associati

  4. gestire le finestre di dialogo (e altro) come servizi

  5. Frammenti di codice VS.

Goodlight

• Autore: Peter O'Hanlon • Supporto Silverlight: sì

• Documentazione: applicazione di esempio disponibile con la libreria

• Hosting: CodePlex

• Licenza: MS-PL

• Caratteristiche:

  1. Gestione “area di lavoro” (set di documenti che può essere chiuso)

  2. supporto per la pelle

  3. messaggistica tra VM


Ottimo post. Ho pensato di aggiungere che Cinch versione 2 supporta Silverlight.
Kildareflare,

44

Cerco di descrivere i frame mancanti nella grande risposta di Pete:

MVVM Toolkit (Microsoft) è una libreria molto leggera con modelli di progetto di Visual Studio che dovrebbe supportare i principianti con questo modello. Se Microsoft ottiene un buon feedback per il suo Toolkit, potrebbe implementarlo come un nuovo modello di progetto di Visual Studio (forse 2010).

Prism (Microsoft p & p) è un framework che fornisce molto più del supporto per il pattern MVVM. L'obiettivo principale di questo progetto è aiutarti a creare applicazioni modulari WPF e / o Silverlight. Quando hai solo bisogno di implementare il modello MVVM o sei un principiante in .NET / WPF, non consiglierò questo progetto. Vedi anche: Link .

WPF Application Framework (WAF) è un framework leggero che ti aiuta a creare app WPF con MVVM. È solo per WPF e quindi non supporta Silverlight. Va un po 'diversamente dalla maggior parte degli altri framework MVVM con l'introduzione dei controller . Sono responsabili del flusso di lavoro dell'applicazione e mediano tra i vari ViewModels.


19

Meh. Mvvm non richiede davvero un intero framework per supportare IMO. Se capisci il concetto, è piuttosto semplice iniziare con una base di base VM pulita che implementa INotify e passare da lì.


4
C'è un motivo per cui molti sviluppatori sviluppano la libreria mvvm. Se quello che dici è vero, perché questi sviluppatori dovrebbero perdere tempo? Perché questi utenti di framework dovrebbero continuare a utilizzare il loro framework mvvm preferito? È vero, "Mvvm non richiede davvero un intero framework per supportare l'IMO". Ma non è pratico fare a meno del framework MVVM.
Syaiful Nizam Yahya

3
-1 IMO che scrive la propria classe RelayCommand per ICommands, una classe Messenger per la comunicazione tra VM e il proprio contenitore IoC per menzionare solo gli strumenti di base necessari per un'applicazione WPF ben funzionante, è una PITA importante. La tua risposta è valida solo per il più semplice dei programmi.
Heliac,


10

Mescola il tuo!

Ho usato EventAggregator da PRISM, con ViewModelBase dalla fondazione MVVM e così via. Ho anche modificato il RelayCommand (DelegateCommand chiamato in alcuni punti) per accettare anche altri dati, e così via.

Non consiglierei solo un framework di per sé.


19
Non sono d'accordo, il problema con questo approccio si rivelerà quando si ottengono nuovi iscritti - il costo di iscrizione al progetto sarà molto più alto in quanto i documenti interni non sono generalmente la priorità.
Florian Doyon,

1
Vedo il punto sulla documentazione, ma potrebbe non essere necessario sviluppare documenti interni. I collegamenti ai siti esterni con la documentazione possono essere incorporati nel codice stesso
Vasudevan Kannan

8

la mia scommessa sarà su Caliburn e MVVMlight, sembra che non molti di questi framework mvvm supportino silverlight. Posso prevedere che ci saranno più framework MVVM tra cui scegliere i framework IoC, perché è più difficile impostare il limite delle funzionalità al framework mvvm. Immagino che il modo migliore per scoprire quale sia il più adatto al tuo progetto sarà elencando / confrontando le loro caratteristiche.

Dai un'occhiata anche a Mix10. Imparo molto dal discorso: costruire il tuo framework mvvm.


4
Ho trovato quel discorso abbastanza utile. Ecco un link diretto: live.visitmix.com/MIX10/Sessions/EX15
anshul


4

Sto usando Prism e mi piace. Una delle cose più importanti per me era che c'erano altre persone là fuori che potevano aiutarmi se necessario e buoni esempi. Una volta avviate le nozioni di base, ci sono un sacco di estensioni necessarie per la tua app ed è molto più semplice quando lavori con lo stesso framework di altri.


2

Tutto sommato, sono 90% attraverso la mia applicazione e tutto ciò che ho usato di MVVM Toolkit è la funzione di fabbrica che crea un comando per me, data una funzione delegata da avviare in Execute. Penso che potrei passare a qualsiasi altro framework o nessun framework in un paio d'ore.


2

Un altro da considerare è MEFedMVVM . L'ho usato su un paio di progetti ed è leggero, non invadente e supporta Silverlight e WPF. È anche in grado di supportare i dati in fase di progettazione in Blend, per coloro che utilizzano quel prodotto.


1

Se stai cercando Extensibility (la possibilità di scrivere componenti aggiuntivi) su un framework di applicazioni WPF / MVVM, potresti essere interessato al disclaimer di SoapBox Core : l'ho scritto . È open source, quindi anche se non lo usi, potrebbero esserci delle buone idee per te. Utilizza MEF sia per estensibilità che per IoC.


1

C'è anche nRoute

Un framework applicativo davvero carino per WPF / Silverlight che supporta MVVM

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.