2012-04-12 28 views
1

我有許多異常類。 F.e .: InvalidMethodParameterException,EntityNotFoundException等全部都有一些代碼,如xxx.yyy.zzz和描述文字。 問題是:是否有任何最佳實踐和技巧來組織類及其代碼/文字。就目前而言,我所做的就是將所有代碼和文字放在其他類甚至是屬性文件中((。)它看起來非常炫目,因爲要添加一個例外,我必須對其他文件進行另一個更改,而不是一個。拋出異常,我使用了一個帶有靜態方法的類,這些方法和方法不是由我創建的,而是由我創建的,所以我想提供其他更有效的方法。願意只使用簡單的存儲每個例外文字和自己的班級裏面的代碼,他們只是忽略了說這是效率不高和不好的做法。Java中的異常類組織

任何幫助,將不勝感激!

+0

我更喜歡與異常相關的錯誤代碼保存在使用它們的異常類中。然而,說服喜歡把他們全部放在一個地方的人可能很難,因爲在同一個地方,所有人都可以在一個地方看到所有的錯誤代碼。 – 2012-04-12 16:50:24

回答

0

您可以集中他們全部爲一類,這將把所有東西都放到一個外部類中:

public OurExceptionsClassTM { 

    static final String 
     ERROR1 = "123.acd.243", 
     ERROR2 = "124.axd.543", 
     ... ; 

    public static class InvalidMethodParameterException extends Exception { ... } 
    ... 

    public static throwSpecialException(){ ... } 
    ... 

} 

解決了必須更改多個文件並且或多或少讓您的同事習慣使用的方式的問題。

你也可以使它更加模塊化,例如爲每個項目設置不同的外部擴展類。重點在於與任何特定例外相關的所有內容都將與該特例保持一致。

1

我認爲一個提升開發者效率的系統架構將遠遠超越提升執行效率的系統架構,因爲前者可以很容易地包含後者。如果對單個模塊進行更改需要打開和修改多個模塊,則該設計不會提升開發人員的效率。 My very favorite programming book建議異常類型由異常處理程序驅動。類似如下:

Version 1: 
void tryToDoSomething(bool arg) { 
    try { 
     doSomething(arg); //Throws MyException 
    } catch (MyException e) { 
     if (e.errorMessage == "Try a different argument") 
      tryToDoSomething(!arg); 
     else if (e.errorMessage == "Try again") 
      tryToDoSomething(arg); 
    } 
} 
Version 2: 
//Split the exception so that it can be handled differently 
void tryToDoSomething(bool arg) { 
    try { 
     doSomething(arg); //Throws InvalidArgumentException, NotReadyException 
    } catch (InvalidArgumentException e) { 
     tryToDoSomething(!arg); 
    } catch (NotReadyException e) { 
     tryToDoSomething(arg); 
    } 
} 

現代編譯器可以優化拋出,使版本2顯着更快,除了自我記錄。這就是實際創建異常的原因,因爲用戶定義的類型是編譯器可以理解的,用於替換必須傳遞並手動檢查的以前的鈍角錯誤代碼。

無論如何,如果錯誤代碼旨在傳達給用戶,我會爭辯說,他們不是例外,而是錯誤,應該像這樣拋出。你可能可以設計一些類似於ErrorFactory的東西,它會接收一個字符串錯誤代碼並且拋出正確的派生類型,或者你可以直接拋出。另一方面,如果錯誤代碼不到到達用戶,爲什麼還要使用它們?

+0

就是這樣做的(+1)。 (關於參考資料:我覺得它更有趣,它是「乾淨的代碼」一書,而不是它是你最喜歡的編程書這一事實;) – DaveFar 2012-04-12 18:12:50

+0

@DaveBall啊,是的,這只是一些過分自我的重要性,不介意:d – Tim 2012-04-12 19:42:16