我認爲一個提升開發者效率的系統架構將遠遠超越提升執行效率的系統架構,因爲前者可以很容易地包含後者。如果對單個模塊進行更改需要打開和修改多個模塊,則該設計不會提升開發人員的效率。 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的東西,它會接收一個字符串錯誤代碼並且拋出正確的派生類型,或者你可以直接拋出。另一方面,如果錯誤代碼不到到達用戶,爲什麼還要使用它們?
來源
2012-04-12 18:00:11
Tim
我更喜歡與異常相關的錯誤代碼保存在使用它們的異常類中。然而,說服喜歡把他們全部放在一個地方的人可能很難,因爲在同一個地方,所有人都可以在一個地方看到所有的錯誤代碼。 – 2012-04-12 16:50:24