11.17 讓異常處理代碼更健壯

來源:dzone.com/articles/good-exception-handling

像冠軍一樣處理異常。

哦,請不要這樣寫……

讓異常處理代碼更健壯

我在各種項目中發現了這種 catch 語句。這是一種“好辦法”,可以在短期內掩蓋問題。然而幾周或幾個月後,這些代碼將成為開發人員的噩夢。絕大多數人可不想讀日誌查問題。因此,還是讓我們避免這種情況。

規則一:catch 語句是用來處理異常的,把異常記到日誌裡然後繼續執行不算處理。唯一的例外是,在發生異常後關閉資源(本文不討論這種情況;如果感興趣,可以參考這篇 McDowell 的博客,雖然寫的時間比較早,但內容很不錯)。

有三種處理異常的基本模式:轉換(translate)重試(retry)恢復(recover)

轉換經常用於處理受檢異常(checked exception),在方法中異常無法拋出,並且無法恢復時使用。在這種情況下,將其轉換為運行時異常(runtime exception)而後拋出是最合適的做法。接下來,運行時異常通常由框架處理。在處理不可靠的服務時,重試非常有用,前提是重新嘗試有意義。一個很好的例子就是網絡中斷重試。如果定義了這種策略,那麼就能夠恢復到正常狀態。例如,如果通過網絡發送數據失敗,可以將數據寫入本地存儲。當然,這時就必須定義如何處理該文件。

此外,上面提到的模式可以組合,比如像下面這個例子如下。

讓異常處理代碼更健壯

如果一切都失敗了,那麼上面這種方法至少可以確保你能意識到問題所在。此外,它還提供了問題的真正原因,從而讓你能快速定位問題。

祝編程快樂!


分享到:


相關文章: