Validación fluida frente a anotaciones de datos [cerrado]

123

¿Cuáles son las diferencias operativas entre estos dos paquetes de validación cuando se usan para la validación de ASP.NET MVC? Parecen tener objetos similares, hasta los nombres de sus objetos. ¿Está uno relacionado con el otro? ¿Cuáles son sus diferencias? ¿De qué manera estas diferencias denotan diferentes casos de uso?

SiberianGuy
fuente
52
También es interesante notar que las preguntas cerradas como no constructivas generalmente tienen muchos votos positivos, por lo que en realidad SON útiles para las personas. Tiene que haber algo mal con esto
Dmitry Efimenko
2
Estoy de acuerdo en que este tipo de pregunta es útil, pero las respuestas a continuación me parecen más como opiniones y no como hechos.
Ian Warburton
3
Estoy completamente de acuerdo también, sin embargo, preguntar "cuáles son las diferencias" en lugar de "cuáles son sus preferencias" probablemente habría evitado la situación.
Jeremy A. West
Creo que el trato es que tienes que redactarlo para que las respuestas estén menos basadas en la opinión que en los hechos. No preguntes, "¿Cuál es tu favorito?" pero "¿Cuáles son las diferencias operativas entre?" Entonces no obtienes respuestas como "Prefiero la validación fluida". pero, en cambio, las cosas que aparecen en primer plano difieren primero y los resultados actuales en segundo lugar.
ruffin

Respuestas:

113

Prefiero validación fluida :

  1. Me da un mejor control de mis reglas de validación.
  2. Hacer la validación condicional en diferentes propiedades es mucho más fácil en comparación con las anotaciones de datos
  3. Separa la validación de mis modelos de vista
  4. Las pruebas unitarias son mucho más fáciles en comparación con las anotaciones de datos
  5. Tiene un excelente soporte de validación del lado del cliente para la mayoría de las reglas de validación estándar
Darin Dimitrov
fuente
66
Algunos puntos más de este artículo ( webdevbros.net/2010/12/03/… ): 1. Demasiadas anotaciones hacen que su modelo se vea feo (similar a su punto 3) 2. Mejor reutilización 3. Mejor rendimiento (como sin Reflexión )
SiberianGuy
2
@Idsa El punto de actuación suena dudoso. La reflexión solo tiene que suceder una vez por modelo. Esto supone una buena implementación, no sé cómo funciona esta implementación en particular.
CodesInChaos
@CodeInChaos, parece que tienes razón. Pero lo mantendré allí ya que tampoco estoy seguro (y lo suficientemente flojo como para descubrir) cómo se implementa.
SiberianGuy
2
Secundo la validación Fluent ... es genial. Desde la perspectiva del código OCD, me encanta que elimina la responsabilidad de la validación de las vistas y le da sus propias clases. Probé xVal durante un tiempo en MVC1 ... Las anotaciones de datos estaban bien para cosas simples, pero una vez que obtuviste más que un puñado de reglas, apenas podías decir qué se suponía que representaba el ViewModel.
Brandon Linton
@Darin, ¿cómo pasas los mensajes de error en la vista? ¿Puedes dar un ejemplo de cómo hacerlo?
Jaime Sangcap
32

Claramente prefiero las anotaciones de datos porque ...

  1. Todas las reglas de validación se pueden configurar en un lugar en el código (dentro de la clase de metadatos del modelo) y no es necesario repetirlas en ningún otro lugar.
  2. existe un excelente soporte para la validación del lado del cliente (de nuevo, ¡sin repetir las reglas de validación!) cuando se usan atributos de Anotación de datos .
  3. Los atributos de anotación de datos se pueden probar para garantizar que estén allí.
  4. existen buenos atributos de validación adicionales creados por la comunidad (por ejemplo, Extensiones de anotaciones de datos ).
Marius Schulz
fuente
2
Creo que la mayoría de estas propiedades se pueden lograr con alguna forma de validación fluida. No sé si la biblioteca en el OP admite esto, pero en principio es posible, y tampoco es muy difícil.
CodesInChaos
¿Cuál es el punto de probar la presencia de atributos? ¿No es eso básicamente repetir las reglas de validación?
Sam
30
@Sam: Al probar si las propiedades están decoradas con atributos de Anotación de datos, no prueba la funcionalidad del atributo en sí; solo te estás asegurando de que esté allí. Debo decir que ahora, dos años después, estoy del lado de Darin y estoy de acuerdo con su respuesta.
Marius Schulz
@Sam, porque probablemente quieras saber si alguien lo elimina de tu modelo.
Steve
3
Gran comentario Marius. Lástima que la mayoría de los tutoriales de EF ahora muestran la validación realizada con Anotaciones de datos. Inicialmente también me enganché por la simplicidad de las anotaciones, pero poco después de intentar implementar una regla de validación personalizada, salté al equipo de validación fluida de inmediato ... Por cierto, lástima que Darin dejó de publicar :( La mayoría de sus comentarios en StackOverflow en el clavo después de más de 5 años !!!
Koshera