In termini più semplici, mi piace pensare a quanto segue:
Modello: sembra e si sente rigorosamente come il tuo modello di dati. A tutti gli effetti è solo una rappresentazione di classe del modello di dati. Non è a conoscenza della tua vista o di qualsiasi elemento all'interno della tua vista. Detto questo, non dovrebbe contenere alcun attributo decorator (ad esempio; Richiesto, Lunghezza, ecc.) Che useresti per la tua vista.
Visualizza modello: funge da legante di dati tra la vista e il modello e, in molti casi, è anche un wrapper per il modello. Sarebbe reso inutile senza la vista, 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 origine dati:
public string FirstName { get; set; }
public string LastName { get; set; }
Ora, poiché il tuo modello di visualizzazione è legato alla tua vista, potrebbe avere la seguente proprietà, che concatena il campo FirstName del modello e il campo LastName insieme come una stringa:
[Display(Name = "Customer Name")]
public string CustomerFullName { get { return String.Format("{0} {1}", myModel.FirstName, myModel.LastName) }}