差異處
這裏顯示兩個版本的差異處。
Both sides previous revision 前次修改 下次修改 | 前次修改 | ||
java:effective_java:exceptions:throw_exceptions_appropriate_to_the_abstraction [2022/04/17 13:43] tony [Introduction] |
java:effective_java:exceptions:throw_exceptions_appropriate_to_the_abstraction [2022/04/17 14:10] tony [Effective Java - Throw exceptions appropriate to the abstraction (ToDo)] |
||
---|---|---|---|
行 1: | 行 1: | ||
{{tag>java effective_java exceptions}} | {{tag>java effective_java exceptions}} | ||
- | ====== Effective Java - Throw exceptions appropriate to the abstraction (ToDo) ====== | + | ====== Effective Java - Throw exceptions appropriate to the abstraction ====== |
===== Introduction ===== | ===== Introduction ===== | ||
這個Item講了幾個重要概念: | 這個Item講了幾個重要概念: | ||
行 6: | 行 6: | ||
- 將例外轉換且重新包裝(exception wrapping)的時候,要將底層例外設為新例外的cause,以利於client去做完整的log或其它處理。 | - 將例外轉換且重新包裝(exception wrapping)的時候,要將底層例外設為新例外的cause,以利於client去做完整的log或其它處理。 | ||
- 勿濫用這個重新包裝機制,盡量消除會造成發生底層例外的原因。例如先做precheck,避免呼叫底層API;或者是在原先API發生問題的時候,進行例外處理,讓服務不會受到中斷,並且log以便之後備查。 | - 勿濫用這個重新包裝機制,盡量消除會造成發生底層例外的原因。例如先做precheck,避免呼叫底層API;或者是在原先API發生問題的時候,進行例外處理,讓服務不會受到中斷,並且log以便之後備查。 | ||
- | 第一點與第二點非常同意。以第一點來說,通常我們以不同模組、階層的角度去設計對應的例外,不同模組、階層以Clean Architecture來說,如Gateway、Domain、UseCase layer等,會設計不同的Checked Exception並搭配Homogeneous Exception(同質例外)降低介面演進的機會。關於Homogeneous Exception(同質例外)可以參考[[http://teddy-chen-tw.blogspot.com/2013/02/checked-or-unchecked-exceptions-4b.html|搞笑談軟工]]提及的內容。 | + | 第一點與第二點非常同意。以第一點來說,通常我們以不同模組、階層的角度去設計對應的例外,不同模組、階層以Clean Architecture來說,如Gateway、Domain、UseCase layer等,會設計不同的Checked Exception並搭配Homogeneous Exception(同質例外)降低介面演進的機會。關於Homogeneous Exception(同質例外)可以參考[[http://teddy-chen-tw.blogspot.com/2013/02/checked-or-unchecked-exceptions-4b.html|搞笑談軟工]]提及的內容。\\ |
+ | 第三點的話,我就會看情況而決定。假如我需要多做precheck或者是在API發生問題的時候去讓服務可以正常使用,這些勢必會額外增加開發與維護成本。 | ||
===== Note ===== | ===== Note ===== | ||
Effective Java第三版Item 73。 | Effective Java第三版Item 73。 |