Modello e ViewModel per la vista

0

Sono nuovo nel pattern MVVM. Ho una finestra che ha 3 caselle di testo ( Name , Address , Description ), un pulsante di salvataggio e un listview che mostra i campi sopra. Quando si fa clic sul pulsante Salva, voglio salvare i campi nel database e mostrare il record nella lista.

Come posso progettare il mio modello, ViewModel per questa interfaccia?

    
posta Mussammil 07.02.2014 - 05:37
fonte

2 risposte

1

Questo è il modo in cui vedo (e lo faccio).

Nel tuo caso (che è piuttosto semplice), avrei un ViewModel contenente un elenco di Modelli e una proprietà SelectedModel. La vista avrebbe una forma e un elenco di corso. Il modulo sarebbe associato al modello attualmente selezionato. La vista sarebbe legata al ViewModel e indirettamente al modello (i dati nell'elenco e il modulo). Il tuo ViewModel si prenderà anche cura di convalidare e salvare i dati nel database chiamando un metodo sul tuo repository (o il contesto, che è fondamentalmente un repository, se stai usando EF).

Il modello è la tua logica aziendale, il modello di dominio. Gli oggetti qui avranno tutti i dati rilevanti per l'azienda e i metodi per manipolare tali dati. Il modello dovrebbe essere progettato per essere il più semplice possibile mentre si soddisfano le esigenze aziendali. Ciò significa relazioni normalizzate, design disaccoppiato e così via. Rendilo il più facile da mantenere possibile, indipendentemente dalla vista. Ciò significa che lo stesso modello può essere riutilizzato in diverse applicazioni (un desktop e un'app Web possono utilizzare lo stesso modello). Nel tuo caso si tratta di un oggetto con nome, indirizzo e descrizione. Questo è tutto ciò che serve per raggiungere il tuo obiettivo.

La vista non sarà sempre così semplice. A volte è necessario aggregare dati da più modelli o eseguire altre manipolazioni dei dati solo per mostrare i dati su una vista. Un report ad esempio può avere molti dati da molti modelli. Altre volte, la vista avrà davvero bisogno di semplificare un sacco di cose complesse che stanno accadendo nel modello, per darti una panoramica di alto livello senza troppi dettagli. Nel tuo caso, la vista è anche un po 'più complessa del tuo modello di dominio. Hai bisogno di un elenco per vedere tutti i tuoi modelli di dominio e un modulo per modificarne uno allo stesso tempo.

Questo è il punto in cui entra in gioco ViewModel. La VM si troverà tra il modello e la vista. Comprende un oggetto modello (o più oggetti modello), introduce nuove proprietà che sono una combinazione di altre proprietà nel modello e così via. ViewModel è progettato per semplificare la presentazione. Ciò significa proprietà semplici a cui la tua vista può legarsi e cose simili. Non importa quanto sia complesso il tuo Modello o la tua Vista, il tuo ViewModel si trova in mezzo e fa tutte le trasformazioni necessarie dei dati che vuoi mostrare. La stessa cosa, ma al contrario accade quando una vista sta inviando dati indietro (invio modulo o altro input). ViewModel è quello che trasforma i dati della vista in qualcosa che il tuo modello comprende. Nel tuo caso il ViewModel sarà piuttosto semplice, tenendo solo la lista di Modelli e un Modello Selezionato, ma in esempi più complessi, potrebbe fare alcuni calcoli o quant'altro per realizzare ciò di cui ha bisogno la vista.

    
risposta data 07.02.2014 - 10:15
fonte
2

Questo è il modo in cui implementiamo MVVM nella mia azienda, e naturalmente anche il modo in cui preferirei:

Il modello dovrebbe riflettere ciò che è necessario presentare sulla Vista e il tuo database dovrebbe anche adattarsi a questo. Ciò significa che il tuo modello (e il tuo DB) dovrebbero contenere campi per Nome, Indirizzo e Descrizione.

Preferisco passare un modello al mio ViewModel. Alcune persone sostengono che questo è sbagliato secondo lo schema MVVM, ma assicura che il tuo modello sia conservato nella forma corretta, dalla vista e fino al livello DAL.

Quindi, ViewModel contiene un modello, che ha alcune proprietà a cui è possibile associare. Quando si saluta il pulsante Salva, ViewModel intercetta il comando specificato e analizza il modello sul livello Bll. Il livello Bll usa il livello DAL per mantenere il modello nel database. Potresti anche fare dei controlli nel livello Bll per assicurarti di non fare dulicati. Potresti voler sostituire una voce esistente invece di crearne una nuova.

Modifica: Un breve esempio:

    
risposta data 07.02.2014 - 09:51
fonte

Leggi altre domande sui tag