鐵人賽 例外處理!?能吃嗎 上 - Jian-Min-Huang/tech-note GitHub Wiki
前言
丐(ㄓㄨㄢ)幫(ㄢˋ)有多少弟(ㄅㄚˋ)子(ㄍㄜ˙),不是由我決定,而是由你決定的!
如果你真的英明神武,使得國(ㄒㄩ)泰(ㄑ一ㄡˊ)民(ㄇ一ㄥˊ)安(ㄑㄩㄝˋ),鬼才願意當乞(ㄌ一ˋ)丐(ㄨㄞˋ)呢。
話雖如此,我們還是不能把它放著不管(燦笑)。
畢竟需求不可能有完全明確的一天,邊寫邊改是個常態,否則敏捷也不會紅成這樣。
換個方式想,我們也只能增加我們程式的強健度來與邊寫邊改共存。
try {
// some logic
} catch (Exception ex) {
// catch error and do something, maybe just logging
} finally {
// release the resources
}
上面是最基本的一個例外處理區塊,今天就來簡單看看例外處理好不好吃。
Fault Error Failure Exception
如果你問我有什麼差別,首先我會跟你說都是壞孩子,不同時期的壞孩子 (毆飛)
Error 指的是軟體元件處於錯誤的狀態,可能會因此導致 Failure。
Fault 則是架設或是經過判斷之後確認導致 Error 發生的原因。
而程式語言通常會用 Exception 來代表 Error & Failure。
Try Catch Finally 的責任分擔
- Try
- 實作邏輯
- 為狀態回復做準備,Memento Pattern
- 如果發現錯誤可以在這裡就先回報
- Catch
- Error Handling and Fault Handling
- 錯誤回報
- 控制重試流程
- Finally
- 釋放資源並且在釋放失敗的時候回報
要怎麼讓你的例外處理變得很館(ㄑ一ㄤˊ)長(ㄓㄨㄤˋ)
不小心被大家發現我是館粉,噗。
好的,其實破題來說,就三個原則。
好的錯誤回報及記錄機制,滿足下一篇的那些原則基本上這個就算完成。
再來是讓你的例外處理有回復機制,雖然說會寫程式的人會盡量讓你的程式不要像龍捲風一樣掃過去就把 Context 搞的亂七八糟,但例外處理難免,所以有時候會在 Try Block 弄一個狀態回復點,這個可以參考 Memento Pattern。
最後就是重試,畢竟有時候發生例外是一種暫態,或是說你想讓你的程式更智能。就可以設計一個錯誤重試機制。
那麼上集先這樣,下集我們在來展示一些例外處理的實例。
About Me
Jian-Min Huang
wide range skill set backend engineer
Research, Architecture, Coding, DB, Ops, Infra.
mainly write Java but also ❤️ Scala, Kotlin and Go