Fließende Validierung vs. Datenanmerkungen [geschlossen]

123

Was sind die operativen Unterschiede zwischen diesen beiden Validierungspaketen bei Verwendung für die ASP.NET MVC-Validierung? Sie scheinen ähnliche Objekte zu haben, bis hin zu ihren Objektnamen. Ist einer mit dem anderen verwandt? Was sind ihre Unterschiede? Inwiefern bezeichnen diese Unterschiede unterschiedliche Anwendungsfälle?

SiberianGuy
quelle
52
Es ist auch interessant zu bemerken, dass Fragen, die als nicht konstruktiv geschlossen werden, normalerweise viele positive Stimmen haben, so dass sie tatsächlich für Menschen hilfreich sind. Es muss etwas falsch mit dieser Sache sein
Dmitry Efimenko
2
Ich bin damit einverstanden, dass diese Art von Frage nützlich ist, aber die folgenden Antworten scheinen mir eher Meinungen als Fakten zu sein.
Ian Warburton
3
Ich stimme ebenfalls voll und ganz zu, aber die Frage "Was sind die Unterschiede?" Anstelle von "Was sind Ihre Vorlieben?" Hätte die Situation wahrscheinlich vermieden.
Jeremy A. West
Ich denke, der Deal ist, dass Sie ihn formulieren müssen, damit die Antworten weniger auf Meinungen als auf Fakten beruhen. Fragen Sie nicht: "Was ist Ihr Favorit?" aber "Was sind die operativen Unterschiede zwischen?" Dann erhalten Sie keine Antworten wie "Ich bevorzuge die fließende Validierung". sondern Dinge, die zuerst die Unterschiede in den Vordergrund stellen und dann die Ergebnisse präsentieren.
Ruffin

Antworten:

113

Ich bevorzuge die fließende Validierung :

  1. Dadurch habe ich eine weitaus bessere Kontrolle über meine Validierungsregeln
  2. Die bedingte Validierung verschiedener Eigenschaften ist im Vergleich zu Datenanmerkungen viel einfacher
  3. Es trennt die Validierung von meinen Ansichtsmodellen
  4. Unit Testing sind im Vergleich zu Datenanmerkungen weitaus einfacher
  5. Es bietet eine hervorragende clientseitige Validierungsunterstützung für die meisten Standardvalidierungsregeln
Darin Dimitrov
quelle
6
Einige weitere Punkte aus diesem Artikel ( webdevbros.net/2010/12/03/… ): 1. Zu viele Anmerkungen lassen Ihr Modell hässlich aussehen (ähnlich wie Punkt 3). 2. Bessere Wiederverwendbarkeit. 3. Bessere Leistung (da keine Reflexion )
SiberianGuy
2
@Idsa Der Leistungspunkt klingt zweifelhaft. Die Reflexion muss nur einmal pro Modell erfolgen. Dies setzt eine gute Implementierung voraus. Ich weiß nicht, wie diese spezielle Implementierung funktioniert.
CodesInChaos
@CodeInChaos, sieht so aus, als ob Sie Recht haben. Aber ich werde es dort behalten, da ich auch nicht sicher bin (und faul genug bin, um herauszufinden), wie es implementiert wird.
SiberianGuy
2
Ich stimme der FluentValidation zu ... sie rockt. Aus der Sicht der Code-OCDs finde ich es toll, dass dadurch die Verantwortung für die Validierung aus den Ansichten entfernt und ihre eigenen Klassen vergeben werden. Ich habe xVal vor einiger Zeit in MVC1 ausprobiert ... Datenanmerkungen waren für einfache Dinge in Ordnung, aber sobald Sie mehr als eine Handvoll Regeln hatten, konnten Sie kaum sagen, was das ViewModel darstellen sollte.
Brandon Linton
@Darin Wie übergeben Sie die Fehlermeldungen in der Ansicht? Können Sie ein Beispiel dafür geben?
Jaime Sangcap
32

Ich bevorzuge eindeutig Datenanmerkungen, weil ...

  1. Alle Validierungsregeln können an einer Stelle im Code (innerhalb der Modellmetadatenklasse) konfiguriert werden und müssen an keiner anderen Stelle wiederholt werden.
  2. Bei Verwendung von Datenanmerkungsattributen wird die clientseitige Validierung (erneut - ohne Wiederholung der Validierungsregeln!) hervorragend unterstützt .
  3. Datenanmerkungsattribute können getestet werden, um sicherzustellen, dass sie vorhanden sind.
  4. Es gibt nette zusätzliche Validierungsattribute, die von der Community erstellt wurden (z. B. Data Annotations Extensions ).
Marius Schulz
quelle
2
Ich denke, die meisten dieser Eigenschaften können mit einer fließenden Validierung erreicht werden. Ich weiß nicht, ob die Bibliothek im OP dies unterstützt, aber im Prinzip ist es möglich und auch nicht sehr schwer.
CodesInChaos
Was ist der Sinn des Testens auf das Vorhandensein von Attributen? Wiederholt das nicht grundsätzlich Validierungsregeln?
Sam
30
@Sam: Indem Sie testen, ob Eigenschaften mit Datenanmerkungsattributen versehen sind, testen Sie nicht die Funktionalität des Attributs selbst. Sie stellen nur sicher, dass es da ist. Ich sollte jetzt, zwei Jahre später, sagen, dass ich auf Darins Seite bin und seiner Antwort zustimme.
Marius Schulz
@ Sam, weil Sie wahrscheinlich wissen möchten, ob jemand es von Ihrem Modell entfernt.
Steve
3
Toller Kommentar Marius. Schade, dass die meisten EF-Tutorials heutzutage die Validierung mit Datenanmerkungen zeigen. Anfangs war ich auch von der Einfachheit der Anmerkungen begeistert, aber kurz nachdem ich versucht hatte, eine benutzerdefinierte Validierungsregel zu implementieren, sprang ich sofort auf das Team Fluent Validation ... Übrigens, schade, dass Darin aufgehört hat zu posten :( Die meisten Seine Kommentare in StackOverflow sind nach mehr als 5 Jahren
genau richtig