zoukankan      html  css  js  c++  java
  • 可扩展验证框架

    可扩展验证框架 - 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
Copyright © 2011-2022 走看看