zoukankan      html  css  js  c++  java
  • 学习之路二十三:利用委托减少Try/Catch

    前段时间利用了一点空闲时间优化了项目中的代码,其中减少Try/Catch是这次优化的重点。

    主要是参考了老A的大作:如何编写没有Try/Catch的程序,看了一下,老A主要介绍了怎么减少按钮事件中的Try/Catch,不过我们项目是WCF,基本上就没有按钮事件,不过老A也提供了一个很好的思路,那就是利用委托动态的为每个方法加上Try/Catch,有了这个思路之后就很好做了。

    核心代码:

     1         private T InvokeHandler<T>(string clientName, string methodName, Delegate delegateWarpper, object[] parameters)
     2         {
     3             try
     4             {
     5                 //这边关于第一个参数要注意一下
     6                 //当委托绑定的方法是静态的,那么就可以传“null”
     7                 //如果绑定的方法不是静态的,就必须传当前方法的实例才行,也就是 -- delegateWarpper.Target
     8                 //如果还不懂,直接MSDN查找,我也是看MSDN的
     9                 return (T)delegateWarpper.Method.Invoke(delegateWarpper.Target, parameters);
    10             }
    11             catch (TargetInvocationException exception)
    12             {
    13                 Console.WriteLine(exception.InnerException.Message + Environment.NewLine + exception.InnerException.StackTrace);
    14             }
    15             return default(T);
    16         }

    原有的调用方式:

     1         public List<string> GetNames(string clientName)
     2         {
     3             //如果每个方法都这样写,那么就要有很多相似的Try/Catch代码
     4             //不仅写了很多多余的代码,有使得代码不够优美了
     5             try
     6             {
     7                 return new List<string>() { "12" };
     8             }
     9             catch (Exception exception)
    10             {
    11                 Console.WriteLine(exception.Message + Environment.NewLine + exception.StackTrace);
    12             }
    13             return null;
    14         }

    现在的调用方式:

    1         public List<string> GetNames(string clientName)
    2         {
    3             //首先定义委托绑定的方法
    4             //可以使用.NET Framework中自带的Action和Func委托
    5             Func<List<string>> func = () => new List<string> { "12" };
    6             //然后调用助手方法就可以了
    7             return InvokeHandler<List<string>>(clientName, "GetNames", func, null);
    8         }

    通过旧的和新的调用方式比较,发现代码有了很大的缩减,而且从代码整洁的角度来看新的调用方式更加优美。

    这个方法不是万能的,不过应对80%的情况还是没有问题滴!

    好了,如果园友很有什么好的看法,提出来分享下,Thanks.......  

    最后祝大家2013春节快乐!

    以同步至:个人文章目录索引

  • 相关阅读:
    Java实现 LeetCode 56 合并区间
    JQuery实现对html结点的操作(创建,添加,删除)
    JQuery实现对html结点的操作(创建,添加,删除)
    JQuery实现对html结点的操作(创建,添加,删除)
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 55 跳跃游戏
    Java实现 LeetCode 54 螺旋矩阵
    Java实现 LeetCode 54 螺旋矩阵
    Java实现 LeetCode 54 螺旋矩阵
  • 原文地址:https://www.cnblogs.com/yangcaogui/p/2890862.html
Copyright © 2011-2022 走看看