TerryLee技术专栏
摘要:在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的工厂,用来创建验证器。首先我们编写一个简单的业务对象类:
这只是一个普通的业务实体类,现在我们要验证它的姓名属性不能为空,且长度在1到50之间,年龄字段在0到200之间,加上如下Attribute:
在Validation Application Block中,现在已经提供的验证器有:
l AndCompositeValidator
l Int32RangeValidator
l NotNullValidator
l NullValidator
l OrCompositeValidator
l RangeValidator
l StringLengthValidator
l ValidNumberValidator
l ValueAccessValidator
现在就可以进行验证了,如下面的代码片断所示:
首先使用ValidationFactory创建Validator,再调用Validator的Validate方法进行验证,返回的结果ValidationResults是一个ValidationResult的集合,包含了错误信息,我们可以通过Key和Message属性来显示错误信息,如下所示:
三.通过外观类实现验证
用过Logging Application Block的朋友都知道,在Logging Application Block中为我们提供了一个Logger的外观类,简化了记录日志。同样在Validation Application Block中,为我们提供了一个Validation的外观类,不需要再使用ValidationFactory。如下面的代码片断所示:
可以看到,Validation Application Block沿用了Enterprise Library的一贯操作模式,使用起来也非常的简单。如果提供的验证器不能满足实际开发的需要,也可以很轻松的创建自定义的验证其。关于Validation Application Block就简单得介绍到这儿。
posted on 2006-12-25 23:28 TerryLee 阅读(12606) 评论(27) 编辑 收藏 所属分类: Enterprise Library
谢谢 回复 引用 查看
我很早就想要这个功能了。谢谢 回复 引用
我想这应该是一个很好的功能,但是在日常的开发过程会被多少人使用还是未知数。毕竟很多人在设计类时,可能很少考虑到数据的验证这个层面上。就比如我吧,希望以后养成这种好习惯。:) 回复 引用 查看
在这插句嘴 问个关于2.0的问题 我要想使用2.0中DAAB该把那几个DLL引用进来 看到有好多DLL文件,又去Google找过了,也没有个介绍 所以跑这里来问了 回复 引用
很想知道,如果我们想在界面上的某一个输入框控件的校验中,绑定某个Validator该如何做? 回复 引用 查看
@hedking using Microsoft.Practices.EnterpriseLibrary.Data; using Microsoft.Practices.EnterpriseLibrary.Data.Sql; 回复 引用 查看
通常我们都会在客户端验证,MS这样弄,每次验证都要和SERVER交互,多浪费时间呀. 回复 引用 查看
@Tseng 客户端验证不能代替服务端验证 回复 引用 查看
@Tseng 空空鱼说的对,是两个不同层面的验证 回复 引用 查看
IValidator<User> userValidators = ValidationFactory.CreateValidator<User>(); 刚才发现在V3.0 2007 CTP中将接口IValidator<T>改为了抽象类Validator<T>,包括Validator 回复 引用 查看
@空空鱼 @TerryLee 是的,服务器验证可以避免一些漏洞,但是这样来回往返,效率上肯定没有客户端验证那么好。 回复 引用 查看
楼主:在别的机器上运行就会出现这个错误: 打不开RSA密钥容器 为什么呀 回复 引用
楼主的文章写得通俗易懂,非常适合我这样的初学者,现在Enterprise Library已经发布2007 May版本,希望楼主可以针对最新的版本,继续发表文章,小弟们先拜谢了。 回复 引用 查看
我用vs2005进行开发,现在正在用EnterpriseLibrary2.0,请问有必要装换到EnterpriseLibrary3.0版吗? 回复 引用