• 【开源系列】三国演义LBS (四)源码:基础框架:验证


    前言

    -----------------------------------------------

    本随笔介绍了基础框架中的验证框架,包含了串式验证、异常捕捉机制、智能抛异常。
    下一篇随笔将介绍基于IL的反射框架,极大提高反射性能。

    相关讨论组入口: http://www.pixysoft.net/ (点击进入)

     

    快速入门

    ----------------------------------------------- 

    带跟踪记录的异常捕捉机制

    当我们的项目变得庞大,异常有可能会在多个日志被记录,导致了查看日志困难,编写代码的时候又不明确是否需要捕捉这个异常。

    因此,我就想,如果这个异常曾经被捕捉过记录了,那么他继续往下抛的时候,能够被识别出来不再记录。于是有了这个跟踪机制: 

            /// <summary>
            
    /// 测试异常捕捉机制
            
    /// </summary>
            public void test001()
            {
                
    try
                {
                    Method1();
                }
                
    catch (Exception ex)
                {
                    
    if (Exceptions.IsHandled(ex))
                        
    return;

                    
    //由于异常已经被Method2捕捉,所以外部异常将被忽略 不会处理到此

                    Console.WriteLine(
    "error here.");
                }
            }

            
    private void Method1()
            {
                
    try
                {
                    hello(
    null);
                }
                
    catch (Exception ex)
                {
                    
    if (Exceptions.IsHandled(ex))
                        
    throw ex;

                    
    //由于异常没有被处理过,所以会被记录

                    Console.WriteLine(
    "write down something in method2");

                    
    throw Exceptions.Parse(ex).Handle();
                }
            }

            
    private void hello(string hello)
            {
                hello 
    = hello.Trim().ToUpper();
            } 

    上面的例子,仅仅会输出"write down something in method2" ,而不会有"error here",因为他之间被捕捉过之后,内部设置了时间戳了。

    自动对方法参数签名记录的异常抛出机制:

    我们很多时候要对输入参数进行验证,如果出现空指针就要抛出(这就是防范式编程的思路) 。但是抛出每次都要写入一大堆的文字说明很麻烦,因此有了以下的机制:

            /// <summary>
            
    /// 输入参数验证的捕捉
            
    /// </summary>
            public void test002()
            {
                
    try
                {
                    Method2(
    "aaa""bbb");
                }
                
    catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);

                    
    //输出为:

                    
    //[Method2] input(s) invalid.
                    
    //Pixysoft.Framework.Verifications::Pixysoft.Framework.Verifications.testcase.Method2(String name,String value)
                    
    //::String name = aaa;
                    
    //::String value = bbb;
                }
            }

            
    private void Method2(string name, string value)
            {
                
    throw Exceptions.VerificationFailedException(name, value);
            } 

    只要抛出这个异常,就能自动获取抛出的方法名、入口参数等等信息,极大简化代码量。

    串式验证机制:

    对于入口参数进行验证,代码又多有重复,有人用了什么AOP之类的“重型” 框架,有点得不偿失,因此我参考了别人的设计,得到了以下的代码:

            /// <summary>
            
    /// 串式验证
            
    /// </summary>
            public void test003()
            {
                Console.WriteLine(
                    Verification.Verifies(
    23).IsNotNullOrEmpty().IsGreater(1).IsLess<int>(4).Result());
            } 

    下期预告:

    -----------------------------------------------   

    Pixysoft.Framework.Reflections 反射框架

    完全基于IL,模仿微软的Type结构,实现反射功能+AOP功能,极大的提升性能。例如在Java中常见的BeanMap都会出现。敬请留意! 

    附件下载

    -----------------------------------------------   

    Pixysoft.Framework.Verifications打包下载:

    http://www.boxcn.net/shared/5ja9gzysix 

    SVN同步:

    http://qun.qq.com/air/#95755843/share 

  • 相关阅读:
    redis 缓存验证码 步骤
    方法返回值 前面的<T>是什么?
    spring boot的运行原理
    在本地tomcat中调试Spring boot项目遇到的一些问题
    UEditor中上传图片的步骤
    总结彻底解决Spring MVC+Mybatis中文乱码问题
    ueditor1.4.3二次开发添加自定义Dialog
    UEditor之图片上传如何和真实项目结合
    UEditor之实现配置简单的图片上传示例 (转)
    Java比较运算符
  • 原文地址:https://www.cnblogs.com/zc22/p/2029680.html
Copyright © 2020-2023  润新知