ASP.NET MVC Model vs ViewModel

OK, ho sentito parlare di “ViewModels” per quanto riguarda ASP.NET MVC di MS.

Ora, quello è inteso per essere un tipo specifico di modello, corretto? Non un tipo specifico di vista.

Per quanto ne so, è un tipo di modello che ha uno scopo specifico di interagire con la vista? O qualcosa di simile?

Alcuni chiarimenti sarebbero apprezzati.

In sostanza, il modello e il modello di vista sono entrambi semplici classi con attributi.

L’objective principale di queste classi è di descrivere (a “Modello”) un object per i rispettivi destinatari che sono rispettivamente il controllore e la vista.

Quindi hai perfettamente ragione quando dici

A mio avviso, è un tipo di modello che ha uno scopo specifico di interagire con la vista

Pertanto, mentre le classi del modello sono effettivamente quadro di dominio con cui l’applicazione interagisce, i modelli di vista sono classi semplici con cui le visualizzazioni interagiscono.

Spero che sia d’aiuto 🙂

Aggiornamento :

Microsoft ha sviluppato una versione specializzata di Presentation Pattern di Martin Fowler basata in gran parte sul Model-View-Controller e la chiama Model-View-ViewModel (MVVM) per l’applicazione PF. Questo modello è rivolto alle moderne piattaforms di sviluppo dell’interfaccia utente in cui gli sviluppatori dell’interfaccia utente hanno requisiti diversi basati più sulla logica aziendale rispetto agli sviluppatori tradizionali. Dai un’occhiata qui per un po ‘di teoria

In parole povere, mi piace pensare a quanto segue:

Modello: Rigorosamente sembra e sembra il tuo modello di dati. A tutti gli effetti è solo una rappresentazione di class del tuo modello di dati. Non ha alcuna conoscenza della tua vista o di alcun elemento all’interno della tua vista. Detto questo, non dovrebbe contenere alcun decoratore di attributi (ad es., Richiesto, Lunghezza, ecc.) Che utilizzeresti per la tua Vista.

Visualizza modello: funge da raccoglitore dati tra la vista e il modello e in molti casi è anche un wrapper per il modello. Sarebbe reso inutile senza View, quindi in genere non è riutilizzabile su più viste e controller come un modello standard.

Ad esempio, il tuo Modello potrebbe avere le seguenti proprietà, che sono rappresentazioni dirette della tua fonte di dati:

public string FirstName { get; set; } public string LastName { get; set; } 

Ora, poiché il tuo View Model è legato alla tua vista, potrebbe avere la seguente proprietà – che concatena insieme il campo FirstName del modello e il campo LastName come una stringa:

  [Display(Name = "Customer Name")] public string CustomerFullName { get { return String.Format("{0} {1}", myModel.FirstName, myModel.LastName) }} 

Ho trovato questo articolo una risorsa molto utile per capire come il “modello di dominio” e “Visualizza modello” interagiscono all’interno di un’applicazione MVC, in particolare per quanto riguarda il binding. Meglio di tutti include esempi invece di descrizioni astratte.

“Dal momento che MVC è stato rilasciato ho osservato molta confusione sul modo migliore di build i modelli di visualizzazione, a volte questa confusione non è priva di buone ragioni poiché non sembra esserci una tonnellata di informazioni là fuori sulle raccomandazioni delle migliori pratiche. una soluzione “taglia unica” che funge da proiettile d’argento In questo post descriverò alcuni degli schemi principali che sono emersi e i pro / contro di ciascuno. È importante notare che molti di questi modelli sono emersi dalle persone che risolvono i problemi del mondo reale “.

http://geekswithblogs.net/michelotti/archive/2009/10/25/asp.net-mvc-view-model-patterns.aspx

WikiPedia ha una descrizione più completa di Model vs. ModelView di quella che otterresti in una risposta SO: http://en.wikipedia.org/wiki/Model_View_ViewModel

Quoto:

Modello : come nel classico pattern MVC, il modello si riferisce a (a) un modello di object che rappresenta il contenuto dello stato reale (un approccio orientato agli oggetti), o (b) il livello di accesso ai dati che rappresenta quel contenuto (un approccio centrico).

Visualizza : come nel classico pattern MVC, la vista si riferisce a tutti gli elementi visualizzati dalla GUI come pulsanti, windows, grafica e altri controlli.

ViewModel : ViewModel è un “Modello della vista” che significa che è un’astrazione della vista che serve anche nell’associazione dati tra la vista e il modello. Potrebbe essere visto come un aspetto specializzato di quello che sarebbe un Controller (nel pattern MVC) che funge da raccoglitore / convertitore di dati che modifica le informazioni del Modello in Visualizza informazioni e passa i comandi dalla Vista al Modello. ViewModel espone proprietà pubbliche, comandi e astrazioni. ViewModel è stato paragonato a uno stato concettuale dei dati rispetto allo stato reale dei dati nel modello.

Esiste una nozione di ViewModel, ma generalmente non è associata ad Asp.net MVC. MVC utilizza il modello di visualizzazione di Model View Controller, in cui il controller gestisce le interazioni, crea i dati dal modello e quindi passa tali dati alla visualizzazione per la visualizzazione.

ViewModels (e Pattern View ViewModel Model) è generalmente associato a Silverlight e WPF. Xaml è un po ‘diverso in quanto le viste possono eseguire collegamenti bidirezionali con i ViewModels, quindi la tecnologia è leggermente diversa. Ad esempio, se si associa una casella di testo a un campo, mentre si digita in quella casella di testo, il valore del campo viene aggiornato in modo dinamico. Questo tipo di interazione non è realmente ansible nelle pagine web poiché le pagine web sono prive di status.

La somiglianza tra i due pattern è che entrambi stanno cercando di separare la logica dal display. L’uso / ragione più comune di questo è il test: si desidera essere in grado di eseguire dal codice (tramite un framework di test) tutte le interazioni che un utente invocherà tramite l’interfaccia utente.