簡體   English   中英

異常翻譯器攔截器。 好主意?

[英]Exception translator interceptor. Good idea?

只是想征求一點意見:您認為擁有一個攔截器類來攔截所有異常並將其轉換為特定於應用程序的異常是一個好主意嗎? 基本上,異常處理(別無其他)從一個類移到另一個類。

您能對此提出任何利弊嗎?

謝謝。

是的,這是一個合理的想法。 看看Spring的org.springframework.jdbc.support.SQLExceptionTranslator為例。 將煩人的已檢查異常轉換為未檢查異常特別好。

通常的缺點是復雜性增加-因此,這取決於您有多少個特定於應用程序的異常。

我會說這是一個非常糟糕的主意。 如果我使用一個接口來說明它為某個條件引發了IllegalArgumentException,那么如果滿足此條件,我希望得到一個IllegalArgumentException,而不是特定於應用程序的異常。

如果它有一個錯誤並且拋出NullPointerException,我更喜歡直接獲取一個NullPointerException來識別問題,而不是將它封裝在某些特定於應用程序的異常中,該異常不能告訴問題出在哪里。

現在,如果您的類不是AOP的攔截器,而是另一個對象或API的包裝器(例如spring-jdbc是JDBC的包裝器),並且它僅將有意義的檢查異常轉換為特定於應用程序的異常方式,我不會看到任何問題。

在我看來,在某些情況下可以用來降低復雜性。 我有一個帶有嵌入式數據庫的應用程序; 我可能會丟失記錄,sql異常,各種各樣的東西,而這些都不是我想向用戶報告的東西。 某些UI類具有一個方法,該方法調用另一個調用的方法,依此類推,並且某些地方的代碼遇到了其中一個,並開始將其傳遞回去。 在特定於應用程序設計的適當級別上,我將捕獲該陷阱,並可能將其記錄下來,並將其包裝在特定於應用程序的異常中,該異常的工作是產生一條消息,引導用戶對它進行正確的處理,除了通知他有什么問題。 特定於應用程序的異常是為將要查看結果消息的用戶量身定制的,並且可以響應一系列我需要捕獲但不想報告的“較低級別”異常而生成。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM