【开源系列】三国演义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 

原文地址:https://www.cnblogs.com/zc22/p/2029680.html