Enterprise Library 3.0 体验(2):使用Validation Application Block

摘要:在Enterprise Library 3.0 December 2006 CTP版中,加入了一个新的成员Validation Application Block,用来实现对业务对象的验证。它支持两种方式的验证,通过特性Attribute和通过配置文件,但是在最新版本中并没有提供配置的设计时支持,我们只能通过手动去修改配置文件来实现,所以本文主要看一下通过Attribute来实现验证。

 

主要内容

1.通过ValidationFactory创建验证器

2.通过外观类实现验证

 

一.概述

Enterprise Library 3.0 December 2006 CTP版中,加入了一个新的成员Validation Application Block,用来实现对业务对象的验证。它支持两种方式的验证,通过特性Attribute和通过配置文件,但是在最新版本中并没有提供配置的设计时支持,我们只能通过手动去修改配置文件来实现,所以本文主要看一下通过Attribute来实现验证。

二.通过ValidationFactory创建验证器

Validation Application Block沿用了其他应用程序块的一贯做法,使用相同的操作模式,为我们提供了一个ValidationFactory的工厂,用来创建验证器。首先我们编写一个简单的业务对象类:
Enterprise Library 3.0 体验(2):使用Validation Application Block/// <summary>
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
/// [url]http://terrylee.cnblogs.com[/url]
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
/// </summary>

Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
public class User
Enterprise Library 3.0 体验(2):使用Validation Application Block
{
Enterprise Library 3.0 体验(2):使用Validation Application Block    
private String _name;
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block    
private int _age;
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block    
public String Name
Enterprise Library 3.0 体验(2):使用Validation Application Block    
{
Enterprise Library 3.0 体验(2):使用Validation Application Block        
get return _name; }
Enterprise Library 3.0 体验(2):使用Validation Application Block        
set { _name = value; }
Enterprise Library 3.0 体验(2):使用Validation Application Block    }

Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block    
public int Age
Enterprise Library 3.0 体验(2):使用Validation Application Block    
{
Enterprise Library 3.0 体验(2):使用Validation Application Block        
get return _age; }
Enterprise Library 3.0 体验(2):使用Validation Application Block        
set { _age = value; }
Enterprise Library 3.0 体验(2):使用Validation Application Block    }

Enterprise Library 3.0 体验(2):使用Validation Application Block}
这只是一个普通的业务实体类,现在我们要验证它的姓名属性不能为空,且长度在150之间,年龄字段在0200之间,加上如下Attribute

Enterprise Library 3.0 体验(2):使用Validation Application Block/// <summary>
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
/// [url]http://terrylee.cnblogs.com[/url]
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
/// </summary>

Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
public class User
Enterprise Library 3.0 体验(2):使用Validation Application Block
{
Enterprise Library 3.0 体验(2):使用Validation Application Block    
private String _name;
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block    
private int _age;
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block    [NotNullValidator]
Enterprise Library 3.0 体验(2):使用Validation Application Block    [StringLengthValidator(
1,50)]
Enterprise Library 3.0 体验(2):使用Validation Application Block    
public String Name
Enterprise Library 3.0 体验(2):使用Validation Application Block    
{
Enterprise Library 3.0 体验(2):使用Validation Application Block        
get return _name; }
Enterprise Library 3.0 体验(2):使用Validation Application Block        
set { _name = value; }
Enterprise Library 3.0 体验(2):使用Validation Application Block    }

Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block    [Int32RangeValidator(
0,200)]
Enterprise Library 3.0 体验(2):使用Validation Application Block    
public int Age
Enterprise Library 3.0 体验(2):使用Validation Application Block    
{
Enterprise Library 3.0 体验(2):使用Validation Application Block        
get return _age; }
Enterprise Library 3.0 体验(2):使用Validation Application Block        
set { _age = value; }
Enterprise Library 3.0 体验(2):使用Validation Application Block    }

Enterprise Library 3.0 体验(2):使用Validation Application Block}
Validation Application Block中,现在已经提供的验证器有:

l         AndCompositeValidator

l         Int32RangeValidator

l         NotNullValidator

l         NullValidator

l         OrCompositeValidator

l         RangeValidator

l         StringLengthValidator

l         ValidNumberValidator

l         ValueAccessValidator

现在就可以进行验证了,如下面的代码片断所示:

Enterprise Library 3.0 体验(2):使用Validation Application Block/// <summary>
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
/// [url]http://terrylee.cnblogs.com[/url]
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
/// </summary>

Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
class Program
Enterprise Library 3.0 体验(2):使用Validation Application Block
{
Enterprise Library 3.0 体验(2):使用Validation Application Block    
static void Main(string[] args)
Enterprise Library 3.0 体验(2):使用Validation Application Block    
{
Enterprise Library 3.0 体验(2):使用Validation Application Block        User user 
= new User();
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        user.Name 
= "TerryLee";
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        user.Age 
= 60;
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        IValidator
<User> userValidators = ValidationFactory.CreateValidator<User>();
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        ValidationResults results 
= userValidators.Validate(user);
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        Console.WriteLine(results.IsValid.ToString());
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        Console.Read();
Enterprise Library 3.0 体验(2):使用Validation Application Block    }

Enterprise Library 3.0 体验(2):使用Validation Application Block}
首先使用ValidationFactory创建Validator,再调用ValidatorValidate方法进行验证,返回的结果ValidationResults是一个ValidationResult的集合,包含了错误信息,我们可以通过KeyMessage属性来显示错误信息,如下所示:

Enterprise Library 3.0 体验(2):使用Validation Application Block/// <summary>
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
/// [url]http://terrylee.cnblogs.com[/url]
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
/// </summary>

Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
class Program
Enterprise Library 3.0 体验(2):使用Validation Application Block
{
Enterprise Library 3.0 体验(2):使用Validation Application Block    
static void Main(string[] args)
Enterprise Library 3.0 体验(2):使用Validation Application Block    
{
Enterprise Library 3.0 体验(2):使用Validation Application Block        User user 
= new User();
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        user.Name 
= "TerryLee";
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        user.Age 
= 210;
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        IValidator
<User> userValidators = ValidationFactory.CreateValidator<User>();
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        ValidationResults results 
= userValidators.Validate(user);
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        
foreach (ValidationResult result in results)
Enterprise Library 3.0 体验(2):使用Validation Application Block        
{
Enterprise Library 3.0 体验(2):使用Validation Application Block            Console.WriteLine(String.Format(
"Key: {0},Message: {1}", result.Key.ToString(), result.Message));
Enterprise Library 3.0 体验(2):使用Validation Application Block        }

Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        Console.Read();
Enterprise Library 3.0 体验(2):使用Validation Application Block    }

Enterprise Library 3.0 体验(2):使用Validation Application Block}
三.通过外观类实现验证

用过Logging Application Block的朋友都知道,在Logging Application Block中为我们提供了一个Logger的外观类,简化了记录日志。同样在Validation Application Block中,为我们提供了一个Validation的外观类,不需要再使用ValidationFactory。如下面的代码片断所示:
Enterprise Library 3.0 体验(2):使用Validation Application Block/// <summary>
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
/// [url]http://terrylee.cnblogs.com[/url]
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
/// </summary>

Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block
class Program
Enterprise Library 3.0 体验(2):使用Validation Application Block
{
Enterprise Library 3.0 体验(2):使用Validation Application Block    
static void Main(string[] args)
Enterprise Library 3.0 体验(2):使用Validation Application Block    
{
Enterprise Library 3.0 体验(2):使用Validation Application Block        User user 
= new User();
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        user.Name 
= "TerryLee";
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        user.Age 
= 210;
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        ValidationResults results 
= Validation.Validate<User>(user);
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        
foreach (ValidationResult result in results)
Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        
{
Enterprise Library 3.0 体验(2):使用Validation Application Block            Console.WriteLine(String.Format(
"Key: {0},Message: {1}", result.Key.ToString(), result.Message));
Enterprise Library 3.0 体验(2):使用Validation Application Block        }

Enterprise Library 3.0 体验(2):使用Validation Application Block
Enterprise Library 3.0 体验(2):使用Validation Application Block        Console.Read();
Enterprise Library 3.0 体验(2):使用Validation Application Block    }

Enterprise Library 3.0 体验(2):使用Validation Application Block}
可以看到,Validation Application Block沿用了Enterprise Library的一贯操作模式,使用起来也非常的简单。如果提供的验证器不能满足实际开发的需要,也可以很轻松的创建自定义的验证其。关于Validation Application Block就简单得介绍到这儿。









本文转自lihuijun51CTO博客,原文链接:http://blog.51cto.com/terrylee/67649 ,如需转载请自行联系原作者
上一篇:图片等比例缩放


下一篇:记一次跟目录报只读权限的问题 /dev/sda3 on / type ext4 (ro,relatime,data=ordered)