可扩展验证框架

可扩展验证框架 - 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工具端的设置

自省推动进步,视野决定未来。
心怀远大理想。
为了家庭幸福而努力。
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架构师
原文地址:https://www.cnblogs.com/Leo_wl/p/3608762.html