Verwenden von ViewModel in ASP.NET MVC mit FluentValidation

9

Ich verwende ASP.NET MVC mit den POCO-Klassen von Entity Framework und dem Framework FluentValidation. Es funktioniert gut und die Validierung läuft so ab, wie sie sollte (als ob ich DataAnnotations verwenden würde). Ich habe sogar clientseitige Validierung erhalten. Und ich bin ziemlich zufrieden damit.

Da dies eine Testanwendung ist, die ich gerade schreibe, um zu sehen, ob ich neue Technologien zusammenbringen kann (und sie auf dem Weg lernen kann), bin ich jetzt bereit, mit ViewModels zu experimentieren, anstatt nur das eigentliche Modell an die Aussicht. Ich plane, etwas wie AutoMapper in meinem Dienst zu verwenden, um die Zuordnung von Model zu ViewModel hin und her zu machen, aber ich habe zuerst eine Frage.

Wie wird sich das auf meine Validierung auswirken? Sollten meine Validierungsklassen (geschrieben mit FluentValidation) gegen das ViewModel statt gegen das Model geschrieben werden? Oder muss es an beiden Orten passieren? Einer der großen Vorteile von DataAnnotations (und FluentValidation) war, dass Sie an einem Ort eine Validierung durchführen könnten, die "überall" funktionieren würde. Und es erfüllt (meistens) dieses Versprechen, aber wenn ich anfange, ViewModels zu verwenden, verliere ich diese Fähigkeit nicht und muss an zwei Stellen zur Validierung zurückkehren?

Oder denke ich nur daran falsch?

    
Brian McCord 10.06.2010, 18:17
quelle

1 Antwort

4
  

Oder denke ich nur daran falsch?

Wahrscheinlich;)

Wenn Sie Ihren ViewModels den gesamten Validierungscode hinzufügen, würden Sie diese nur noch an Stelle Ihrer tatsächlichen Modelle validieren. Alles, was wirklich geändert wird, ist, welche Objekte in einen ungültigen Zustand gelangen können.

Im Moment freue ich mich, wenn ich nur ViewModels validiere und diese Informationen dann an die tatsächlichen Models und DAO-Layer zurückgebe. Ob deine Domain einen ungültigen Status haben kann oder nicht, ist ein strittiges Thema, aber bis jetzt funktioniert diese Technik gut für mich. Validierung an einer Stelle und keine ungültigen Objekte in meinem Persistenzspeicher.

    
jfar 11.06.2010, 00:51
quelle