2010-07-26 1 views

Antwort

10

Was am besten Praktiken betrifft, würde ich sagen: in keinem von ihnen. Die Validierung sollte getrennt sein. Mit Frameworks wie FluentValidation können Sie Ihre Validierungslogik vollständig von Ihren Modellen trennen. Aber um Ihre Frage zu beantworten, würde ich Validierung in Ansichtsmodelle setzen, da dies die Klassen sind, an die Sie Ihre Controller-Aktionen binden. Sie können auch mehrere Ansichtsmodelle verwenden, die an dasselbe Modell gebunden sind, jedoch unterschiedliche Validierungsregeln aufweisen.

+0

GOOD POINT! Sie können auch mehrere Ansichtsmodelle verwenden, die an dasselbe Modell gebunden sind, jedoch unterschiedliche Validierungsregeln aufweisen. – GibboK

+0

Ich sehe kein Szenario für _View-Modelle, die an dasselbe Modell gebunden sind, aber unterschiedliche Validierungsregeln_ –

4

Setzen Sie Ihre Anmerkungen in Ihr Viewmodel.

Es ist möglich, mehrere ViewModels für jedes DataModel zu verwenden, z. B. DisplayModel, EditModel, ListModel .. alle, die möglicherweise andere Annotationen erfordern.

Es wird allgemein als beste Methode angesehen, Ihr DataModel nicht direkt einer Ansicht auszusetzen, insbesondere in "POST"/Bearbeitungsszenarien.

Ich schlage vor, das Lesen ausgezeichneten Überblick Brad Wilson an: http://bradwilson.typepad.com/blog/2009/10/aspnet-mvc-2-templates-part-1-introduction.html

diesen Artikel in erster Linie die Verwendung von dislpay und Vorlagen bearbeiten innerhalb MVC2 decken, sondern zeigen deutlich die Vorteile der Verwendung der Viewmodel Muster

0

Nun meine Meinung ist: es kommt darauf an. Normalerweise kontrolliere ich meine Eingabe in den Controllern und den Modellen, so dass die Eingabe sowohl im Controller als auch im Modell validiert wird. Dies ist für den Fall, dass ich das Modell an eine andere Art von App binden möchte. Sag, WPF.

Allerdings verwenden viele Leute auch "defensive Programmierung". Dies bedeutet, dass jede Eingabe einer Funktion (Parameter) überprüft wird. In diesem Fall kann eine Eingabe mehrmals überprüft werden, aber Sie stellen sicher, dass selbst wenn Sie etwas ändern, die Validierungslogik gültig ist.

Also für mich, ein paar Fragen:

1) Gibt es eine Chance, dass es ein Szenario, in dem die Validierungslogik umgangen wird. Wie das Modell an eine wpf-App binden.

2) Soll ich die Leistung gegenüber der Gewährleistung der Sicherheit beeinträchtigen, indem ich die Eingabe in jeder Funktion überprüfe?

Für mich this Artikel auf Querschneiden Anliegen auch geholfen.

Das sind meine Gedanken zu der Sache. Hoffe es hilft

1

Wenn Sie einzelne Verantwortung folgen, dann sollte es wahrscheinlich in seine eigene Komponente gehen. Davon abgesehen, wenn Sie eine Abkürzung machen möchten, ist es in Ordnung, aber es im ViewModel. Es sollte aber definitiv nicht in das Modell gehen. Ihr Modell sollte "reine" Daten sein. Keine Geschäftsregeln und Validierung sind Geschäftsregeln.