异常处理的一些思考

假设有一个业务 serviceA,一个 通用的 方法 commonService

function serviceA(){     
     obj = commonService(); # 内部报异常,捕获异常后 返回默认值,此处为null
    ....
     heavyFunction()  # 可能的慢速调用
    ....
    otherService.doSomthing(obj)  # 函数体内调用 obj的方法,属性将导致空指针异常
}

commonService 内部捕获异常的坏处
1. 代码编程原则是尽早暴露错误,这样当程序异常时可以找到异常的原始原因。
   将异常点延迟到 otherService.doSomthing 函数内部,这样程序异常终止时,在 "异常点" 将查不到 root cause,因为此处   异常是空指针异常,commonService内部代码造成的异常将无法查看了
2. 异常延后的后果是本该结束的程序,又多执行了一些时间,如果后面有慢速调用,则大大增加了程序执行时间
3. commonService 异常时返回默认值或默认处理,在当前的业务 serviceA中可能此默认处理是正确的,而其他业务serviceB,serviceC
   可能有不同的处理,这样 commonService的通用性就削弱了。

转载于:https://my.oschina.net/rock117/blog/510860

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值