2010-12-15 7 views
11

Ich bin es gewöhnt, Datenmodellklassen mit Datenanmerkungsattributen zu dekorieren, aber der Purist in mir buckelt leicht bei rein darstellenden Attributen wie dem Darstellungsformat hier. Ich bin jedoch sehr glücklich, hier validierungszentrische Attribute zu behalten. Ein guter Grund, warum ich alle Anmerkungen usw. im Datenmodell beibehalten muss, ist, dass mein Ansichtsmodell Datenmodellklassen aggregiert, z. Meine ViewModelBase.DetailItem<TEntity> -Eigenschaft im Ansichtsmodell ist nur eine Referenz auf eine Entitätsklasse in meinem Datenmodell. Wenn ich Präsentationsanmerkungen in das Ansichtsmodell verschieben möchte, müsste ich mein Design radikal dahingehend überarbeiten, dass ich Datenmodelleigenschaften in meinem Ansichtsmodell dupliziere und ein Objektzuordnungswerkzeug zum Auffüllen von Ansichtsmodellobjekten basierend auf Datenmodellobjekten verwendet.Sollten Datenanmerkungen auf dem Modell oder dem Ansichtsmodell sein?

Wo sollte ich meine Datenanmerkungen machen?

Gerade BTW, ist das, was mein Rohentwurf ViewModelBase wie folgt aussieht:

public class ViewModelBase<T> 
{ 
    public virtual string PageTitle { get; set; } 
    public virtual string ViewHeading { get; set; } 

    public virtual ViewMode ViewMode { get; set; } 
    public virtual IEnumerable<T> ItemList { get; set; } 
    public virtual T DetailItem { get; set; } 
} 
+0

Überprüfen Sie auch: http://StackOverflow.com/Questions/3338919/MVC-validation-using-Data-Annotations-Model-Classes-Or-VIEW-Model-Classes – DarrellNorton

Antwort

7

Ich teile die gleiche Sorge um den DRY-Principal und die Validierung, weshalb ich die meisten Validierungsanforderungen im Modell behalten möchte. Aber warum muss es das eine oder andere sein? Model Validation gehört in das Modell, aber es gibt bestimmte view-spezifische Validierungen, die in das Viewmodel gehören.

Das gesagt, Daten Annotationen sind nur das: Anmerkungen um Daten. Nicht richtige Validierungslogik. Validierungslogik ist ein völlig anderes Konzept als Datenanmerkungen (ein erforderliches Attribut ist nur ein Aspekt der Validierung). Ich persönlich finde es schwierig zu bestimmen, wo eine echte Validierung in eine MVVM-Implementierung passt, da eine Validierung Kontext erfordert und nicht nur erforderlich ist oder nicht.

Kurze Antwort: Wenn es in Ihrem Modell ist, wird es zu Ihren Viewmodels aggregiert. Wenn eine View-spezifische Anforderung vorliegt, kann das Viewmodel bei Bedarf zusätzliche Anforderungen berücksichtigen.

+0

Hey @William, lange nicht gelesen :-) Ich mag, was Sie über die Validierung zu den Viewmodels aggregiert sagen, aber ich habe einige Hürden in zusätzliche Validierung zu aggregieren Typ Viewmodels hinzuzufügen. Ich werde sehen, ob ich heute Abend etwas Funky finde. – ProfK

+0

Vielleicht werden die Viewmodels nicht weit genug von den Modellen entfernt (oder umgekehrt werden sie nicht nahe genug zu den Views abstrahiert), um die Entscheidung zu erleichtern? Ich glaube immer noch, dass die Validierung nicht auf Ansichten beschränkt ist. Eventuell ist ein Kontext involviert (z. B. Ein Name ist in einem Krankenhaussystem erforderlich. Außer für Neugeborene, für die noch kein Name gilt), aber Validierungslogik und Argumentation sind nur selten für eine bestimmte Ansicht anwendbar. – WilliamB

+0

Ich frage mich, wer Sie hier gewählt hat. Wirklich nicht gefragt, wenn Sie mich fragen. – ProfK

11

Validierung zumindest an dem View-Modell durchgeführt werden soll, weil das ist, was man aus der Sicht erhalten. Auch die Validierung wird immer im Kontext einer bestimmten Ansicht durchgeführt. Sie können also zwei verschiedene Ansichtsmodelle verwenden, die zwei verschiedenen Ansichten entsprechen, aber einer einzelnen Modellklasse zugeordnet sind. Da die Validierung je nach Ansicht unterschiedlich sein kann, sollte diese Überprüfung für das Ansichtsmodell durchgeführt werden. Wenn Sie die Validierung für das Modell durchgeführt haben, wäre es schwierig, zwischen den beiden Fällen zu unterscheiden, da Sie möglicherweise eine Situation haben, in der eine Eigenschaft in der ersten Ansicht, aber nicht in der zweiten Ansicht erforderlich ist. Wenn Sie also Datenanmerkungen für die Validierung verwenden, sollten Sie Ihr Ansichtsmodell mit ihnen dekorieren.

+0

Guter Punkt über die zwei verschiedenen Validierungen, aber Es scheint, dass das Modell eher ein DTO als ein vollständiges Domänenmodell mit Geschäftslogik für verschiedene Anwendungsfälle ist, in denen jeder Anwendungsfall von einem anderen View & View-Modell berücksichtigt wird. – ProfK

Verwandte Themen