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的方法来定义上下界则会报错,望高手指点。

posted on 2007-01-07 18:41  shenfx  阅读(871)  评论(1编辑  收藏  举报

导航