Im einfachsten Sinne denke ich gerne an Folgendes:
Modell: Sieht genau wie Ihr Datenmodell aus und fühlt sich auch so an. In jeder Hinsicht ist es nur eine Klassendarstellung Ihres Datenmodells. Es hat keine Kenntnis von Ihrer Ansicht oder von Elementen in Ihrer Ansicht. Das heißt, es sollte keine Attributdekoratoren (dh Erforderlich, Länge usw.) enthalten, die Sie für Ihre Ansicht verwenden würden.
Ansichtsmodell: Dient als Datenordner zwischen Ihrer Ansicht und Ihrem Modell und ist in vielen Fällen auch ein Wrapper für Ihr Modell. Ohne die Ansicht wird sie unbrauchbar, sodass sie normalerweise nicht wie ein Standardmodell für mehrere Ansichten und Controller wiederverwendbar ist.
Beispielsweise kann Ihr Modell die folgenden Eigenschaften aufweisen, die eine direkte Darstellung Ihrer Datenquelle darstellen:
public string FirstName { get; set; }
public string LastName { get; set; }
Da Ihr Ansichtsmodell nun an Ihre Ansicht gebunden ist, verfügt es möglicherweise über die folgende Eigenschaft, mit der das Feld Vorname und Nachname des Modells als eine Zeichenfolge verknüpft werden:
[Display(Name = "Customer Name")]
public string CustomerFullName { get { return String.Format("{0} {1}", myModel.FirstName, myModel.LastName) }}