簡體   English   中英

單獨方法中的異常處理以提高可讀性

[英]Exception handling in separate method for readability

在單獨的方法中處理異常是否是反模式?

假設我有一個執行一些底層IO的方法並且可能拋出IOException,並且我有一個方法foo()多次調用該底層IO方法。 像這樣在第三種方法中進行異常處理是否有意義:

 public void foo()  throws MyCheckedException {
     // some stuff
     goDoSomeIO(path1)
    // some other stuff
     goDoSomeIO(path2)
    // some more stuff
     goDoSomeIO(path3)

  }

 private String goDoSomeIO(String filePath) throws MyCheckedException {
     try {
         doSomeIO(filePath);
     } catch (IOException ioe) {
         LOG.error("Io failed at: " + filePath);
         throw new MyCheckedException("Process failed because io failed", ioe)
     }
  }

 private String doSomeIO(String filepath) throws IOException {
        //io stuff
  }

我發現這比doSomeIO方法執行自己的異常處理或foo中發生異常處理的可讀性更高。

捕獲[checked]異常的一般規則是,當您可以從發生的“異常”情況中恢復過來時,執行此操作。 如果您在這里無法從異常中恢復,請使其達到可以恢復的水平。 例如,通知用戶所選文件不可讀,並允許用戶再次選擇文件。 或在實際請求的頁面不存在時向請求者發送404“頁面”。

有效的Java,條款58

此規則的常用例外是捕獲,執行一些瑣碎的不可恢復工作(例如記錄)並重新拋出該例外(可能是包裝好的)。 我認為您的方法沒有錯。

實際上,這是向異常添加更多細節並重新拋出異常的專業模式。

我經常看到在較高級別處理較低級別方法異常的代碼,而不管較低級別是一個方法還是多個方法。

這是很普遍的,並且是由於關注點相互分離:低級的東西負責處理文件,高級的東西捕獲異常以確定復雜的操作是否起作用。 我認為將IO的處理和IO的處理放入不同的方法中沒有任何問題。 (我會嘗試給他們起個名字,不過這會解釋目的。我不喜歡goDoWhatever和doWhatever)

暫無
暫無

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

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