SUMMARY
数据验证的作用很重要,目前.NET提供的内建验证机制是采用DataAnnotation方式来实现属性的验证,并且也提供了很多验证Attribute,如下图:
不过缺点也有:
基于上述2点,做了些改进,填补上述缺点
先建立工程,然后用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/
可扩展验证框架 - A2DFramework验证框架使用介绍,布布扣,bubuko.com
可扩展验证框架 - A2DFramework验证框架使用介绍
原文:http://www.cnblogs.com/aarond/p/Validation.html