前言:
-----------------------------------------------
本随笔介绍了基础框架中的验证框架,包含了串式验证、异常捕捉机制、智能抛异常。
下一篇随笔将介绍基于IL的反射框架,极大提高反射性能。
相关讨论组入口: http://www.pixysoft.net/ (点击进入)
快速入门:
-----------------------------------------------
带跟踪记录的异常捕捉机制
当我们的项目变得庞大,异常有可能会在多个日志被记录,导致了查看日志困难,编写代码的时候又不明确是否需要捕捉这个异常。
因此,我就想,如果这个异常曾经被捕捉过记录了,那么他继续往下抛的时候,能够被识别出来不再记录。于是有了这个跟踪机制:
/// 测试异常捕捉机制
/// </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>
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>
public void test003()
{
Console.WriteLine(
Verification.Verifies(2, 3).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同步: