Validation fluide et annotations de données [fermé]

123

Quelles sont les différences opérationnelles entre ces deux packages de validation lorsqu'ils sont utilisés pour la validation ASP.NET MVC? Ils semblent avoir des objets similaires, jusqu'à leurs noms d'objets. L'un est-il lié à un autre? Quelles sont leurs différences? En quoi ces différences dénotent-elles des cas d'utilisation différents?

SibérienGuy
la source
52
Il est également intéressant de noter que les questions qui sont fermées comme non constructives ont généralement beaucoup de votes positifs, donc elles SONT réellement utiles aux gens. Il doit y avoir quelque chose qui ne va pas avec cette chose
Dmitry Efimenko
2
Je conviens que ce type de question est utile mais les réponses ci-dessous me semblent plus des opinions et non des faits.
Ian Warburton
3
Je suis tout à fait d'accord aussi, mais demander "quelles sont les différences" au lieu de "quelles sont vos préférences" aurait probablement évité la situation.
Jeremy A. West
Je pense que l’accord est que vous devez le formuler de manière à ce que les réponses soient moins fondées sur l’opinion que sur les faits. Ne demandez pas: "Quelle est votre préférée?" mais "Quelles sont les différences opératoires entre?" Ensuite, vous n'obtenez pas de réponses telles que "Je préfère la validation Fluent". mais plutôt des choses qui mettent en avant les différences en premier et présentent les résultats en second.
ruffin le

Réponses:

113

Je préfère la validation fluide :

  1. Cela me donne un bien meilleur contrôle de mes règles de validation
  2. La validation conditionnelle sur différentes propriétés est tellement plus facile que les annotations de données
  3. Il sépare la validation de mes modèles de vue
  4. Les tests unitaires sont beaucoup plus faciles que les annotations de données
  5. Il dispose d'un excellent support de validation côté client pour la plupart des règles de validation standard
Darin Dimitrov
la source
6
Quelques autres points de cet article ( webdevbros.net/2010/12/03/… ): 1. Trop d'annotations rendent votre modèle moche (similaire à votre point 3) 2. Meilleure réutilisabilité 3. Meilleures performances (car aucune réflexion )
SiberianGuy
2
@Idsa Le point de performance semble douteux. La réflexion ne doit se produire qu'une seule fois par modèle. Cela suppose une bonne implémentation, je ne sais pas comment cette implémentation particulière fonctionne.
CodesInChaos
@CodeInChaos, on dirait que vous avez raison. Mais je vais le garder ici car je ne suis pas non plus sûr (et assez paresseux pour le savoir) comment il est implémenté.
SiberianGuy
2
J'appuie le FluentValidation ... ça bascule. Du point de vue du code OCD, j'aime le fait que cela supprime la responsabilité de la validation des vues et leur donne leurs propres classes. J'ai essayé xVal pendant un certain temps dans MVC1 ... Les annotations de données étaient bien pour des choses simples, mais une fois que vous avez eu plus d'une poignée de règles, vous pouviez à peine dire ce que le ViewModel était censé représenter.
Brandon Linton
@Darin comment passez-vous les messages d'erreur dans la vue? pouvez-vous donner un exemple comment le faire?
Jaime Sangcap
32

Je préfère clairement les annotations de données parce que ...

  1. toutes les règles de validation peuvent être configurées au même endroit dans le code (dans la classe de métadonnées du modèle) et n'ont pas besoin d'être répétées ailleurs.
  2. il existe un excellent support pour la validation côté client (encore une fois - sans répétition des règles de validation!) lors de l'utilisation des attributs d' annotation de données .
  3. Les attributs d' annotation de données peuvent être testés pour s'assurer qu'ils sont là.
  4. il existe de jolis attributs de validation supplémentaires créés par la communauté (par exemple, les extensions d'annotations de données ).
Marius Schulz
la source
2
Je pense que la plupart de ces propriétés peuvent être obtenues avec une certaine forme de validation fluide. Je ne sais pas si la bibliothèque de l'OP prend en charge cela, mais en principe c'est possible, et pas très difficile non plus.
CodesInChaos
Quel est l'intérêt de tester la présence d'attributs? N'est-ce pas essentiellement répéter les règles de validation?
Sam
30
@Sam: en testant si les propriétés sont décorées avec des attributs d'annotation de données, vous ne testez pas la fonctionnalité de l'attribut lui-même; vous vous assurez juste qu'il est là. Je dois dire que maintenant, deux ans plus tard, je suis du côté de Darin et je suis d'accord avec sa réponse.
Marius Schulz
@Sam, car vous voulez probablement savoir si quelqu'un le supprime de votre modèle.
Steve
3
Super commentaire Marius. Dommage que la plupart des didacticiels EF montrent de nos jours une validation effectuée avec des annotations de données. J'ai également été initialement accroché par la simplicité des annotations, mais peu de temps après avoir essayé de mettre en œuvre une règle de validation personnalisée, j'ai tout de suite rejoint l'équipe Fluent Validation ... Au fait, dommage que Darin ait arrêté de publier :( La plupart des ses commentaires dans StackOverflow sont parfaits après plus de 5 ans !!!
Koshera