Domanda

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

Tra le possibili opzioni ci sono:

  • MVVM Toolkit
  • Fondazione MVVM
  • WPF Application Framework (WAF)
  • Light MVVM
  • Caliburn
  • Cinch
  • Prism

Nella tua esperienza, quale è meglio?

È stato utile?

Soluzione

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 - è 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.

MVVM Foundation - 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 Leggera - La tesi di Laurent Bugnion e appena 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 - eccellente framework MVVM solo per WPF di Sacha Barber. Questo copre più terreno rispetto ai framework di cui ho parlato sopra. È un framework 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.

Prism - 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 molte cose da consigliare.

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

Altri suggerimenti

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

Funzioni comuni:

  

& # 8226; Classe ViewModelBase (per l'implementazione dell'interfaccia INotifyPropertyChanged)

     

& # 8226; RelayCommand gradisce la classe per collegare il comando UI ai gestori di ViewModel

     

& # 8226; I test unitari vengono forniti con il framework

Cinch

  

& # 8226; Autore: Sacha Barber

     

& # 8226; Supporto Silverlight: no (Cinch versione 2 supporta Silverlight)

     

& # 8226; Documentazione: eccellente, 6 articoli pubblicati su CodeProject

     

& # 8226; Hosting: CodePlex

     

& # 8226; Licenza: Code Project Open License

     

& # 8226; Caratteristiche:

     
      
  1. comportamenti collegati

  2.   
  3. validazione usando IDataErrorInfo

  4.   
  5. supporto per IEditableObject

  6.   
  7. creazione e sottoscrizione di eventi deboli

  8.   
  9. messaggistica mediatore che utilizza eventi deboli

  10.   
  11. Supporto IOC / DI (usando Unity)

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

  14.   
  15. threading helper

  16.   
  17. supporto per le voci di menu

  18.   
  19. modelli chiudibili

  20.   
  21. generatore di codice MVVM

  22.   

MVVM Light Toolkit

  

& # 8226; Autore: Laurent Bugnion

     

& # 8226; Supporto Silverlight: sì

     

& # 8226; Documentazione: molti articoli disponibili sul blog di Laurent + altri sviluppatori

     

& # 8226; Hosting: CodePlex

     

& # 8226; Licenza: licenza MIT

     

& # 8226; Caratteristiche:

     
      
  1. Programma di installazione MSI

  2.   
  3. Progetto VS e modello di elemento

  4.   
  5. Snippet di codice VS

  6.   
  7. Sistema Messenger per la comunicazione tra modelli diversi

  8.   
  9. Gestione degli eventi come comandi

  10.   

Helpers MVVM

  

& # 8226; Autore: Mark Smith

     

& # 8226; Supporto Silverlight: no

     

& # 8226; Documentazione: alcuni articoli sul blog di Mark

     

& # 8226; Hosting: sito web personale

     

& # 8226; Licenza: non definita

     

& # 8226; Caratteristiche:

     
      
  1. comportamenti collegati

  2.   
  3. creazione di viewmodel usando l'estensione di markup

  4.   
  5. convalida basata sugli attributi

  6.   
  7. IOC / DI utilizzando l'approccio ServiceProvider

  8.   
  9. modello chiudibile

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

  12.   

Fondazione MVVM

  

& # 8226; Autore: Josh Smith

     

& # 8226; Supporto Silverlight: no

     

& # 8226; Documentazione: articoli sull'implementazione di Messenger sul blog di Josh o Marlon Grech

     

& # 8226; Hosting: CodePlex

     

& # 8226; Licenza: MS-PL

     

& # 8226; Caratteristiche:

     
      
  1. Sistema Messenger per la comunicazione tra modelli diversi

  2.   
  3. Monitoraggio eventi PropertyChanged

  4.   

Caliburn

  

& # 8226; Autore: Rob Eisenberg

     

& # 8226; Supporto Silverlight: sì

     

& # 8226; Documentazione: documentazione online completa disponibile

     

& # 8226; Hosting: CodePlex http://www.codeplex.com/caliburn

     

& # 8226; Licenza: licenza MIT

     

& # 8226; Caratteristiche:

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

  2.   
  3. presentatori che gestiscono problemi relativi al ciclo di vita dell'interfaccia utente come la gestione della semantica di attivazione, disattivazione e spegnimento per vari componenti dell'interfaccia utente

  4.   
  5. Le applicazioni Caliburn sono completamente testabili

  6.   
  7. varie utility come un task manager in background

  8.   
  9. supporta vari pattern di interfaccia utente (non solo MVVM)

  10.   
  11. contenitore di iniezione delle dipendenze

  12.   

Onyx

  

& # 8226; Autore: William e Kempf

     

& # 8226; Supporto Silverlight: no

     

& # 8226; Documentazione: introduzione di base disponibile su CodePlex

     

& # 8226; Hosting: CodePlex

     

& # 8226; Licenza: non specificata

     

& # 8226; Caratteristiche:

     
      
  1. Modello ServiceLocator

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

  4.   
  5. Servizi correlati all'interfaccia utente come IDisplayMessage

  6.   

calcio

  

& # 8226; Autore: Daniel Vaughan

     

& # 8226; Supporto Silverlight: no

     

& # 8226; Documentazione: 2 articoli molto dettagliati su CodeProject (parte 1 e parte 2)

     

& # 8226; Hosting: CodePlex

     

& # 8226; Licenza: usa, copia, modifica e / o distribuisci e mantieni il copyright!

     

& # 8226; Caratteristiche:

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

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

  4.   
  5. Servizio comandi 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

  6.   
  7. Adattatori di regioni per barre degli strumenti e menu

  8.   
  9. Registrazione client-server pronta per l'uso immediato

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

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

  14.   

nRoute

  

& # 8226; Autore: Rishi

     

& # 8226; Supporto Silverlight: sì

     

& # 8226; Documentazione: molti articoli disponibili sul blog dell'autore (vedi la home page del progetto CodePlex per i link)

     

& # 8226; Hosting: CodePlex

     

& # 8226; Licenza: MS-PL

     

& # 8226; Caratteristiche:

     
      
  1. supporta comportamenti Blend3 e innesca modelli

  2.   
  3. framework di localizzazione delle risorse

  4.   
  5. visualizza i servizi: OpenFileDialog, ShowMessage & # 8230;

  6.   
  7. utilizza gli attributi per mappare View e ViewModel insieme

  8.   

Nito MVVM

  

& # 8226; Autore: Shammah

     

& # 8226; Supporto Silverlight: no

     

& # 8226; Documentazione: no

     

& # 8226; Hosting: CodePlex

     

& # 8226; Licenza: non specificata

     

& # 8226; Caratteristiche:

     
      
  1. varie implementazioni compatibili con MVVM dell'interfaccia ICommand
  2.   

Ocean

  

& # 8226; Autore: Karl Shifflet

     

& # 8226; Supporto Silverlight: no

     

& # 8226; Documentazione: articoli disponibili sul blog di Karl

     

& # 8226; Hosting: sito web personale

     

& # 8226; Licenza: non specificata

     

& # 8226; Caratteristiche:

     
      
  1. scritto in VB.Net

  2.   
  3. convalida basata sugli attributi

  4.   
  5. classi base viewmodel: relaycommand, closeableviewmodel & # 8230;

  6.   
  7. Livello di accesso ai dati del server SQL

  8.   

Framework MVVM di base

  

& # 8226; Autore: Lester Lobo

     

& # 8226; Supporto Silverlight: no

     

& # 8226; Documentazione: applicazione di esempio disponibile con la libreria

     

& # 8226; Hosting: CodePlex

     

& # 8226; Licenza: MS-PL

     

& # 8226; Caratteristiche:

     
      
  1. delegando i comandi \ Keybinding

  2.   
  3. messaggistica tra VM & # 8217; s

  4.   
  5. gestione degli eventi come comandi con comportamenti associati

  6.   
  7. gestione delle finestre di dialogo (e altro) come servizi

  8.   
  9. Snippet di codice VS

  10.   

Goodlight

  

& # 8226; Autore: Peter O & # 8217; Hanlon & # 8226; Supporto Silverlight: sì

     

& # 8226; Documentazione: applicazione di esempio disponibile con la libreria

     

& # 8226; Hosting: CodePlex

     

& # 8226; Licenza: MS-PL

     

& # 8226; Caratteristiche:

     
      
  1. & # 8220; lavoro & # 8221; gestione (set di documenti che può essere chiuso)

  2.   
  3. skin support

  4.   
  5. messaggistica tra VM & # 8217; s

  6.   

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 nuovo modello di progetto di Visual Studio (forse 2010).

Prism (Microsoft p & amp; p) è un framework che offre di più rispetto al supporto per il modello 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 di Controllers . Sono responsabili del flusso di lavoro dell'applicazione e mediano tra i vari ViewModels.

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ì.

Guarda anche:

Caliburn & amp; Onyx !

Mescola tu!

Ho usato EventAggregator di 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é.

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.

Anche il framework Cocktail e DevForce di Ideablade

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.

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

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.

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

C'è anche nRoute

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top