What are the operative differences between these two validation packages when used for ASP.NET MVC validatation? They seem to have similar objects, all the way to their object names. Is one related to another? What are their differences? In what way do these differences denote different use cases?

  • Fluent Validation (3rd party solution)
  • Data annotations (Microsoft "baked-in")

I prefer Fluent Validation:

  1. It gives me far better control of my validation rules
  2. Doing conditional validation on different properties is so much easier compared to Data Annotations
  3. It separates the validation from my view models
  4. Unit testing is far easier compared to Data Annotations
  5. It has excellent client side validation support for most standard validation rules

I clearly prefer Data Annotations because ...

  1. all validation rules can be configured in one place in code (within the model metadata class) and don't need to be repeated anywhere else.
  2. there is excellent support for client side validation (again – without repetition of validation rules!) when using Data Annotation attributes.
  3. Data Annotation attributes can be tested to ensure they're there.
  4. there are nice additional validation attributes created by the community (e.g. Data Annotations Extensions).