I've been putting some thought into validation in the context of an MVC Framework application. Recently I wrote about using Extension Method Validators as a neat way of expressing validation rules in your domain entities. These validators throw a ValidationException when they trigger.
Now in a user interface we would really like to see all the validation failures for a form. So we need to collect the exceptions as they occur and then continue processing. Here's a neat little Validator class that's simply a collection of Action delegates that executes them when its Validate method is called:
public class Validator : List<Action> { public void Validate() { StringBuilder message = new StringBuilder(); foreach (Action validation in this) { try { validation(); } catch (ValidationException validationException) { message.AppendFormat("{0}<br />", validationException.Message); } } if (message.Length > 0) { throw new ValidationException(message.ToString()); } } }
You can use it like this:
string property = ""; Validator validator = new Validator { () => property.Label("Property 1").IsRequired(), () => property.Label("Property 2").IsRequired(), () => property.Label("Property 3").IsRequired() }; validator.Validate();
Since the 'property' variable is an empty string, each call to IsRequired() will throw a ValidationException. The message of each of these exceptions gets captured and then a single ValidationException will be called with the concatenated messages.
No comments:
Post a Comment