怎样重构C#异常处理

最近刚针对基于Windows Mobile/CE的C#项目中的异常处理做了一次小的重构,现分享给大家。不足之处,欢迎大家指正。
注:相关项目并没有引用任何异常处理库。
 
异常处理指导原则及最佳实践(Rules&Best Practice):
1.善用finally块,在一下场景中不需要额外使用try...catch块
a.使用lock语句时,锁会在finally块中释放
b.使用using语句时,会在自动生成的finally块中调用对象的Dispose方法
c.使用foreach语句时,会自动在生成的finally块中调用IEnumerator对象的Dispose方法
d.如果你的类定义了析构函数,编译器会在你的析构函数中自动生成try...catch块,并在其finally块中调用基类的Finalize方法

2.异常处理最佳实践
参考资料:


现状:
由于现在项目基本上没有使用自定义异常类型,因此根据自定义异常类型进行处理处理的方法在项目中并不可行。
由此,我们并不能依据现有的异常来判断哪些异常是可恢复的,同理对于那些涉及数据完整性的异常处理,我们都无从判断。

目标(Goal):
依据C#代码标准中关于异常处理的最佳实践并结合RPNet的现状大范围的减少代码中不必要的try...catch块
在不同层中针对不同的异常类型做不同的处理

方案(Solution):
1、在数据层定义数据出错异常
2、相应的在业务层定义业务逻辑异常
3、在界面层中的界面事件函数中捕获异常,如果是数据及业务异常则加日志并rethrow
4、其他在界面中捕获的异常做简单的捕获和日志处理,并不重新抛异常

清除冗余异常处理的步骤(Action List):
1.如果Catch块中没有任何逻辑代码,而且也没有finally块代码,那么把整个try...catch块都移除
2.如果Catch块中只有 throw ex,而且也没有finally块代码,那么把整个try...catch块移除
3.还没有想到 :), 欢迎大家分享你们的经验
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值