Enterprise Library 3.0 体验 -- Validation Application Block (3)

   前面提到过使用Validation Application Block进行数据验证的方式有两种,1. 使用Attribute  2.使用配制文件(WebConfipAppConfig….),在前两篇里,
l          Enterprise Library 3.0 体验 -- Validation Application Block (1)
l          Enterprise Library 3.0 体验 -- Validation Application Block (2)
介绍的是使用Attribute进行验证的方法,今天再来演示一下如何使用Configuration File进行验证。

注意

  这里使用的Enterprise Library版本为 3.0 December 2006 CTP ,由于该版本是CTP版本,所以功能尚不完善,目前的这个版本里所带的配置工具(EL 3.0 Configuration)并不支持Validationxml配置信息的图形化操作,因此只能手工的在配置文件中添加数据验证规则。相信在正式版本中,这个问题会得到妥善的解决。

仍然以ValidationDemo1中的Student实体类为例,省略部分相似代码,详细代码可参照示例1.
其数据有效性规则如下:
     学号:非空,长度为9位。
     姓名:非空,长度为1~10之间。
     年龄:允许为空,但是大小要在18~24岁之间。

1.          新建一个控制台工程: ValidationDemo3

2.          添加引用: Microsoft.Practices.EnterpriseLibrary.Validation

3.          添加实体类Student.,此处不需要添加任何Attribute

 1       public   class  Student
 2      {
 3           private   string  _stdNo;
 4           public   string  StdNo
 5          {
 6               get  {  return  _stdNo; }
 7               set  { _stdNo  =  value; }
 8          }
 9 
10           private   string  _name;
11           public   string  Name
12          {
13               get  {  return  _name; }
14               set  { _name  =  value; }
15          }
16 
17           private   int  _age;
18           public   int  Age
19          {
20               get  {  return  _age; }
21               set  { _age  =  value; }
22          }
23      }

4.          为项目添加一个配置文件app.config ,并在配置文件中添加对于Student类的验证规则:

 1  < configuration >
 2       < configSections >
 3           < section name = " validation "  type = " Microsoft.Practices.EnterpriseLibrary.Validation.Configuration.ValidationSettings,Microsoft.Practices.EnterpriseLibrary.Validation " />
 4       </ configSections >
 5       < validation >
 6           < type name = " Validation_Application_Block_Part3.Student "  defaultRule = " default " >
 7               < rule name = " default " >
 8                   < properties >
 9                       < property name = " StdNo " >
10                           < add name = " StdNoNotNull "  type = " Microsoft.Practices.EnterpriseLibrary.Validation.Validators.NotNullValidator,Microsoft.Practices.EnterpriseLibrary.Validation "   />
11                           < add name = " StdNoLength "  type = " Microsoft.Practices.EnterpriseLibrary.Validation.Validators.StringLengthValidator,Microsoft.Practices.EnterpriseLibrary.Validation "  lowerBound = " 9 "  upperBound = " 9 "  lowerBoundType = " Inclusive "  upperBoundType = " Inclusive " />
12                       </ property >
13                       < property name = " Name " >
14                           < add name = " NameNotNull "  type = " Microsoft.Practices.EnterpriseLibrary.Validation.Validators.NotNullValidator,Microsoft.Practices.EnterpriseLibrary.Validation "   />
15                       </ property >
16                       < property name = " Age " >                         
17                       </ property >
18                   </ properties >
19               </ rule >
20           </ type >
21       </ validation >
22  </ configuration >

5.          编写测试程序并添加命名空间: Microsoft.Practices.EnterpriseLibrary.Validation

6.          运行程序,察看输出结果。

关于配置信息的几点说明:

l          通过type name属性来指定需要验证的实体类的名称,这里的value应当是命名空间+类名,namespace.calssname.

l          配置文件中仍然支持规则集(RuleSet)的定义,并且可以通过defaultRule 属性来指定一个规则集作为默认的验证规则。

l          对于数据范围的验证,StringLengthValidator,需要通过属性(lowerBoundupperBound)来指定它的上下边界。

l          如果仅仅使用配置文件来定义数据规则而不使用Attrubute,推荐使用Validation.ValidateFromConfiguation()方法来替代Validation.Validate()方法,这样可以避免实例化IAttributeSource接口,在一定程度上提高了运行效率。  

总结:

本文介绍了使用Validation Application Block的另一种方法,既通过配置文件来定义数据规则,它同样支持规则集(RuleSet)等功能,此外在配置文件中定义数据规则具有更高的灵活性,不需要重新编译程序就可以达到动态改变数据规则的要求。缺点是目前EL 3.0 CTP版本尚不支持 Validation Configuration Configuration Tool的集成,需要手工填写配置信息,相对有些繁琐。  

此外细心的朋友可能发现,配置文件中并没有对Age属性的验证定义,是因为我在写这个例子的过程中,并没有找到Int32RangeValidator的边界的定义方法,由于Int32RangeValidator要求是整数型,所以如果按照StringLengthValidator的方法来定义上下界则会报错,望高手指点。

你可能感兴趣的:(application)