VAB seemed to work only for simple domain restrictions on a single property. This is the least interesting, least value providing sort of validation. At worst It is a 2 line if/then block of code! Replacing it with an attribute saves 1 line of code and creates some design rigidities.
If you had complex logic (and it didn’t have to be very complicated), one was tempted to write complex expressions in attributes. This is ugly programming.
If you had complex logic, you were supposed to write custom validators. Contrary to this blog post, which says, “This is very easy to do”, this is not easier than writing a Validate() method– at the very least, it’s 100s of lines of extra code.
The custom validators tend to be a lot like
List<string> Validate(MyObject someObject),
which is the way things were before attribute driven programming.
The codebase began to evolve to use VAB less and less.
Today I’m removing the assembly.