一.概述
在Enterprise Library 3.0 December 2006 CTP版中,加入了一個新的成員Validation Application Block,用來實現對業務對象的驗證。它支持兩種方式的驗證,通過特性Attribute和通過配置文件,但是在最新版本中並沒有提供配置的設計時支持,我們只能通過手動去修改配置文件來實現,所以本文主要看一下通過Attribute來實現驗證。
二.通過ValidationFactory創建驗證器
Validation Application Block沿用了其他應用程序塊的一貫做法,使用相同的操作模式,為我們提供了一個ValidationFactory的工廠,用來創建驗證器。首先我們編寫一個簡單的業務對象類:
/// <summary>
/// http://terrylee.cnblogs.com
/// </summary>
public class User
{
private String _name;
private int _age;
public String Name
{
get { return _name; }
set { _name = value; }
}
public int Age
{
get { return _age; }
set { _age = value; }
}
}
這只是一個普通的業務實體類,現在我們要驗證它的姓名屬性不能為空,且長度在1到50之間,年齡字段在0到200之間,加上如下Attribute:
/**//// <summary>
/// http://terrylee.cnblogs.com
/// </summary>
public class User
{
private String _name;
private int _age;
[NotNullValidator]
[StringLengthValidator(1,50)]
public String Name
{
get { return _name; }
set { _name = value; }
}
[Int32RangeValidator(0,200)]
public int Age
{
get { return _age; }
set { _age = value; }
}
}
在Validation Application Block中,現在已經提供的驗證器有:
l AndCompositeValidator
l Int32RangeValidator
l NotNullValidator
l NullValidator
l OrCompositeValidator
l RangeValidator
l StringLengthValidator
l ValidNumberValidator
l ValueAccessValidator
現在就可以進行驗證了,如下面的代碼片斷所示:
/**//// <summary>
/// http://terrylee.cnblogs.com
/// </summary>
class Program
{
static void Main(string[] args)
{
User user = new User();
user.Name = "TerryLee";
user.Age = 60;
IValidator<User> userValidators = ValidationFactory.CreateValidator<User>();
ValidationResults results = userValidators.Validate(user);
Console.WriteLine(results.IsValid.ToString());
Console.Read();
}
}
首先使用ValidationFactory創建Validator,再調用Validator的Validate方法進行驗證,返回的結果ValidationResults是一個ValidationResult的集合,包含了錯誤信息,我們可以通過Key和Message屬性來顯示錯誤信息,如下所示:
/**//// <summary>
/// http://terrylee.cnblogs.com
/// </summary>
class Program
{
static void Main(string[] args)
{
User user = new User();
user.Name = "TerryLee";
user.Age = 210;
IValidator<User> userValidators = ValidationFactory.CreateValidator<User>();
ValidationResults results = userValidators.Validate(user);
foreach (ValidationResult result in results)
{
Console.WriteLine(String.Format("Key: {0},Message: {1}", result.Key.ToString(), result.Message));
}
Console.Read();
}
}
三.通過外觀類實現驗證
用過Logging Application Block的朋友都知道,在Logging Application Block中為我們提供了一個Logger的外觀類,簡化了記錄日志。同樣在Validation Application Block中,為我們提供了一個Validation的外觀類,不需要再使用ValidationFactory。如下面的代碼片斷所示:
/**//// <summary>
/// http://terrylee.cnblogs.com
/// </summary>
class Program
{
static void Main(string[] args)
{
User user = new User();
user.Name = "TerryLee";
user.Age = 210;
ValidationResults results = Validation.Validate<User>(user);
foreach (ValidationResult result in results)
{
Console.WriteLine(String.Format("Key: {0},Message: {1}", result.Key.ToString(), result.Message));
}
Console.Read();
}
}
可以看到,Validation Application Block沿用了Enterprise Library的一貫操作模式,使用起來也非常的簡單。如果提供的驗證器不能滿足實際開發的需要,也可以很輕松的創建自定義的驗證其。關於Validation Application Block就簡單得介紹到這兒。