可扩展验证框架
2014-03-18 21:28
120 查看
可扩展验证框架 - A2DFramework验证框架使用介绍
SUMMARY用途
DEMO演示
NuGet相关的资料
VS工具端的设置
用途
数据验证的作用很重要,目前.NET提供的内建验证机制是采用DataAnnotation方式来实现属性的验证,并且也提供了很多验证Attribute,如下图:不过缺点也有:
没有基于场景的验证支持
如订单Entity
如果是PC录入,则要求验证完整的属性有效性
如果是Mobile录入,则要求验证一部分属性有效性
如果是后台admin录入,则要求最小属性有效性
硬编码导致不灵活
生产环境中的维护成本,重新编译、测试、上线
管理人员无法修改规则,只能通过开发部门
基于上述2点,做了些改进,填补上述缺点
DEMO演示
先建立工程,然后用NuGet工具引用A2DFramework.BusinessExceptionService:public class OrderEntity { [Required] [RuleMobileAttribute("PC录入")] //这个是A2DFramework提供的验证属性,构造函数中标明场景名 public string FirstName { get; set; } public string LastName { get; set; } public string Mobile { get; set; } } class Program { static void Main(string[] args) { A2DFramework.Starter.Init(); A2DFramework.RuleEngine.Starter.Init(); A2DFramework.BusinessExceptionService.Starter.Init(); OrderEntity user = new OrderEntity(); user.FirstName = ""; Console.WriteLine("=========无场景验证,既执行基本验证=========="); foreach (var error in user.IsValid ())//基本验证用法,不会验证场景 { string msg = string.Format("key: {0}, msg: {1}", error.Key, error.Message); Console.WriteLine(msg); } Console.WriteLine("==========有场景验证 [PC录入]========="); foreach (var error in user.IsValid("PC录入") )//场景验证方式,参数中传入场景名 { string msg = string.Format("key: {0}, msg: {1}", error.Key, error.Message); Console.WriteLine(msg); } Console.ReadKey(); } }
场景部分验证规则可硬编码在C#代码中,也可以extract到xml中:
A2D.config: <?xml version="1.0" encoding="utf-8" ?> <A2D> <BusinessExceptionService configSource ="A2D.BusinessExceptionService.config"> </BusinessExceptionService> </A2D> A2D.BusinessExceptionService.config: <?xml version="1.0" encoding="utf-8" ?> <A2D> <BusinessExceptionService> <Scene Name="场景1"> <EntityType Type="ConsoleApplication12.OrderEntity, ConsoleApplication12"> <Rule RuleType="PropertyValidator " FailAction="Warning" PropertyName="LastName" ErrorMessage="LastName值不能大于10"> <![CDATA[ value!=null&&value.length<=10 ]]></Rule> <Rule RuleType="ClassValidator" FailAction="Warning" ErrorMessage="FirstName与LastName不相符"> <![CDATA[ value!=null &&value.FirstName!=null &&value.LastName!=null &&value.FirstName===value.FirstName ]]> </Rule> </EntityType> </Scene> </BusinessExceptionService> </A2D>
RuleType允许的值有两种:PropertyValidator和ClassValidator。分别代表验证属性、验证整个Entity。
Rule内容采用javascript写法,如果当前RuleType为PropertyValidator,则value代表当前属性值
如果当前RuleType为ClassValidator,则value代表当前Entity
执行结果:
NuGet相关的资料
NuGet学习笔记(1)——初识NuGet及快速安装使用
http://kb.cnblogs.com/page/143190/
NuGet学习笔记(2)——使用图形化界面打包自己的类库
http://kb.cnblogs.com/page/143191/
NuGet学习笔记(3)——搭建属于自己的NuGet服务器
http://kb.cnblogs.com/page/143192/
VS工具端的设置
相关文章推荐
- Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议
- Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议
- 采用一个自创的"验证框架"实现对数据实体的验证[扩展篇]
- Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议
- 一起谈.NET技术,ASP.NET MVC验证框架中关于属性标记的通用扩展方法
- Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议(转载)
- Silverlight实例教程 - 自定义扩展Validation类,验证框架的总结和建议
- ASP.NET MVC验证框架中关于属性标记的通用扩展方法
- Struts2验证框架的使用和扩展
- 配置超简单的Jquery form validate验证框架(修改与扩展)
- 《ASP.NET MVC验证框架中关于属性标记的通用扩展方法》之继续扩展
- AngularJS验证信息框架的封装插件用法【w5cValidator扩展插件】
- (六)SSO之CAS框架扩展 修改CAS源码实现与ESS动态密码验证对接
- Util应用程序框架公共操作类(六):验证扩展
- jQuery Validate验证框架详解(封装jQuery Validate扩展验证方法)
- ASP.NET MVC验证框架中关于属性标记的通用扩展方法
- 可扩展验证框架 - A2DFramework验证框架使用介绍
- {{angular.js 使用技巧}} - 基于验证框架的扩展(w5cValidator)
- (六)SSO之CAS框架扩展 改动CAS源代码实现与ESS动态password验证对接
- Shiro安全框架入门篇(登录验证实例详解与源码)