可扩展验证框架 - A2DFramework验证框架使用介绍
SUMMARY
- 用途
- DEMO演示
- NuGet相关的资料
- VS工具端的设置
用途
数据验证的作用很重要,目前.NET提供的内建验证机制是采用DataAnnotation方式来实现属性的验证,并且也提供了很多验证Attribute,如下图:
不过缺点也有:
- 没有基于场景的验证支持
- 如订单Entity
- 如果是PC录入,则要求验证完整的属性有效性
- 如果是Mobile录入,则要求验证一部分属性有效性
- 如果是后台admin录入,则要求最小属性有效性
- 如订单Entity
- 硬编码导致不灵活
- 生产环境中的维护成本,重新编译、测试、上线
- 管理人员无法修改规则,只能通过开发部门
基于上述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工具端的设置
自省推动进步,视野决定未来。
心怀远大理想。
为了家庭幸福而努力。
A2D科技,服务社会。
A2D Framework(Alpha)
QQ群:283016070,真材实料的.NET架构师
心怀远大理想。
为了家庭幸福而努力。
A2D科技,服务社会。
A2D Framework(Alpha)
- 1. Cache System(本地缓存与分布式缓存共存、支持Memcache和Redis、支持贴标签形式(类似Spring 3.x的Cache形式))
- 2. Event System(本地事件与分布式事件分发)
- 3. IoC(自动匹配功能,实例数量限制功能)
- 4. Sql Dispatcher System(支持ADO.NET及EF)
- 5. Session System(分布式Session系统)
- 6. 分布式Command Bus(MSMQ实现,解决4M限制,支持Session的读取)
- 7. 规则引擎
QQ群:283016070,真材实料的.NET架构师