2012-02-17 16 views
13

Ho ragione nel pensare che sia quasi come un involucro per tutti gli oggetti necessari per una vista?In MVC, cos'è un ViewModel?

Ad esempio, supponiamo di avere un negozio online che vendeva musica e dvd. Nella tua pagina di navigazione desideri visualizzare un elenco di tutti i tuoi dvd e musica. Costruiresti quindi un oggetto ViewModel che ha due proprietà contenenti un elenco di album e un elenco di dvd?

Dal mio punto di vista sembra che tu abbia tutte le tue classi modello ie. una classe Album/Dvd, ma semplicemente passare da sola non sarebbe sufficiente per la tua vista. Un ViewModel funziona fondamentalmente come un vettore per tutti i dati richiesti da View?

+3

possibile duplicato di [Che cos'è ViewModel in MVC?] (Http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc) – HaveNoDisplayName

+0

@HaveNoDisplayName Sfortunatamente questa domanda è di 4 mesi più vecchia di uno lo hai contrassegnato come duplicato, l'altro è visto molto più di questo. Il titolo fa la differenza che vedo. –

+0

L'altra domanda ha risposte migliori quindi questo dovrebbe essere chiuso come duplicato, non viceversa. – Liam

risposta

13

La tua comprensione è per lo più corretta, ma non è completa.

Il ViewModel può anche eseguire conversioni dal tipo di dati che il Modello trasporta al tipo di dati con cui la Vista può lavorare comodamente; questo potrebbe anche significare che ViewModel non porta direttamente i Modelli ma altre navi che trasportano (possibilmente un sottoinsieme) le stesse informazioni in un formato più adatto.

Si consideri che si potrebbe avere un modello di libreria che aggrega album e DVD - la differenza tra tale modello e il corrispondente ViewModel è precisamente che il modello non interessa (o nemmeno conosce) la vista mentre ViewModel ha l'espresso scopo di facilitarla.

+1

Questa risposta è solo parzialmente corretta e non molto esplicita ("... ViewModel ha lo scopo esplicito di facilitarla" non spiega nulla.). La risposta di Deepakmahajan è più corretta anche se non molto approfondita. Ho risposto a una domanda correlata qui che fornisce maggiori dettagli: http://stackoverflow.com/questions/11064316/what-is-viewmodel-in-mvc/29135747#29135747 – Sam

+0

Futuri lettori, segui il link fornito da Sam e dai un'occhiata alla risposta. È davvero molto utile. –

14

ViewModels consente di modellare più entità da uno o più modelli di dati o origini in un singolo oggetto, ottimizzato per il consumo e il rendering dalla vista.

Lo scopo di un ViewModel è che la vista abbia un singolo oggetto da rappresentare, riducendo la necessità di codice di logica UI nella vista che sarebbe altrimenti necessaria. Ciò significa che l'unica responsabilità, o preoccupazione, della vista è quella di rendere quel singolo oggetto ViewModel, favorendo una separazione più chiara delle preoccupazioni (SoC). Le preoccupazioni sono aspetti distinti dell'applicazione che hanno uno scopo particolare (ad esempio, preoccupazione) e tenere questi aspetti a parte significa che la tua applicazione è più organizzata e il codice più mirato. Mettendo il codice di manipolazione dei dati nella propria posizione lontano dalla vista e dal controller, impone il SoC.