異常處理的一些思考

假設有一個業務 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的通用性就削弱了。函數

相關文章
相關標籤/搜索