Before the days of JQuery and MVC and CustomValidation attributes, our approach was to decorate our models with a custom attribute that could be used to enforce complex validations, like ranges or lists. Unfortunately, that meant that if we wanted to perform validation at each layer (as one should), we needed three different sets of code to evaluate those restraints - one at the db (that was fun), one at the business logic layer, and, of course, one at the user interface. Well, perhaps not 'of course', since it wasn't natural in those days to have client-side validation; and although we encouraged it, for these reasons it wasn't always done.