MVVM - Responsabilità
Il modello MVVM è costituito da tre parti: Model, View e ViewModel. La maggior parte degli sviluppatori all'inizio è poco confusa su cosa dovrebbe o non dovrebbe contenere un Model, View e ViewModel e quali sono le responsabilità di ciascuna parte.
In questo capitolo impareremo le responsabilità di ogni parte del pattern MVVM in modo da poter capire chiaramente che tipo di codice va e dove. MVVM è davvero un'architettura a più livelli per il lato client, come mostrato nella figura seguente.
Il livello di presentazione è composto dalle viste.
Il livello logico sono i modelli di visualizzazione.
Il livello di presentazione è la combinazione degli oggetti del modello.
I servizi client che li producono e li mantengono hanno diretto l'accesso in un'applicazione a due livelli o tramite chiamate di servizio e quindi all'applicazione.
I servizi client non fanno ufficialmente parte del modello MVVM ma vengono spesso utilizzati con MVVM per ottenere ulteriori separazioni ed evitare codici duplicati.
Responsabilità del modello
In generale, il modello è il più semplice da capire. È il modello di dati lato client che supporta le visualizzazioni nell'applicazione.
È composto da oggetti con proprietà e alcune variabili per contenere dati in memoria.
Alcune di queste proprietà possono fare riferimento ad altri oggetti del modello e creare il grafico degli oggetti che nel suo insieme sono gli oggetti del modello.
Gli oggetti del modello dovrebbero generare notifiche di modifica delle proprietà che in WPF significa data binding.
L'ultima responsabilità è la convalida che è facoltativa, ma è possibile incorporare le informazioni di convalida sugli oggetti del modello utilizzando le funzionalità di convalida dell'associazione dati WPF tramite interfacce come INotifyDataErrorInfo / IDataErrorInfo
Visualizza responsabilità
Lo scopo principale e le responsabilità delle visualizzazioni è definire la struttura di ciò che l'utente vede sullo schermo. La struttura può contenere parti statiche e dinamiche.
Le parti statiche sono la gerarchia XAML che definisce i controlli e il layout dei controlli di cui è composta una visualizzazione.
La parte dinamica è come le animazioni o le modifiche di stato definite come parte della vista.
L'obiettivo principale di MVVM è che non ci dovrebbe essere alcun codice nella visualizzazione.
È impossibile che non ci sia codice in vista. In vista è almeno necessario il costruttore e una chiamata per inizializzare il componente.
L'idea è che il codice logico di gestione degli eventi, azione e manipolazione dei dati non dovrebbe essere nel codice sottostante in View.
Esistono anche altri tipi di codice che devono essere inseriti nel codice dietro qualsiasi codice necessario per avere un riferimento all'elemento dell'interfaccia utente è intrinsecamente codice di visualizzazione.
Responsabilità di ViewModel
ViewModel è il punto principale dell'applicazione MVVM. La responsabilità principale del ViewModel è fornire i dati alla vista, in modo che la vista possa inserire quei dati sullo schermo.
Consente inoltre all'utente di interagire con i dati e modificare i dati.
L'altra responsabilità chiave di un ViewModel è incapsulare la logica di interazione per una vista, ma non significa che tutta la logica dell'applicazione debba andare in ViewModel.
Dovrebbe essere in grado di gestire la sequenza appropriata delle chiamate per fare in modo che la cosa giusta avvenga in base all'utente o a eventuali modifiche alla vista.
ViewModel dovrebbe anche gestire qualsiasi logica di navigazione come decidere quando è il momento di passare a una visualizzazione diversa.