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.