2009-06-09 132 views
2

我在創建一個幫助器方法來設置異常的消息,自動設置String.Format,添加內部異常,設置命令行退出代碼等;是這樣的:如何創建異常幫助程序?

public static void MyExceptionHelper(ExitCode code, string message) {} 
public static void MyExceptionHelper(ExitCode code, Exception e) {} 
public static void MyExceptionHelper(ExitCode code, Exception e, String message) {} 
public static void MyExceptionHelper(ExitCode code, Exception e, String message, params object[] args) {} 
// etc... 

的BCL已經傳開了幾個靜態類做那種事(如System.ThrowHelper在mscorlib程序)。
最好的地方放在哪裏?作爲例外中的重載構造函數,在單獨的靜態類(如BCL)中,作爲異常本身或其他地方的靜態方法?

回答

1

對於這樣的方法,我更喜歡重載的構造函數。您明確使用它來創建一個新對象,這就是構造函數的用途。

一旦你進入靜態方法的世界,它並不總是清楚它們應該在哪裏結束。您需要分析誰將使用它們以及如何使用它們,然後檢查每個潛在位置的優缺點。然後,你會知道把它們放在哪裏。

1

我只是讓你的異常類的這些構造函數。

0

大多數情況下,BCL中的異常助手都支持本地化(通常包含在幾乎所有.NET BCL程序集中的SR內部類中)。總體思路是,使用幫助器方法傳遞一些基本數據來處理異常,幫助器處理資源檢索和數據格式,以便創建異常。好處是您集中了可能從多個位置拋出但需要以相同方式創建的異常的代碼。所以一般來說,與任何其他實用程序類或繼承對象相同的想法...促進重用和可維護性。

至於在哪裏把他們...我喜歡在我的每一個組件的「內部區域」有一個例外幫手,資源幫手,和其他內部「集會支持」類型。

2

我建議在EnterpriseLibrary的異常應用程序塊,它有一個非常優雅的處理異常的設計,如果你不想要所有的EntLib我建議複製他們的接口。

+0

我同意你馬克 – 2009-06-09 18:14:50

0

這看起來像你必須要得到自己的異常類,並把它這種行爲足以自定義行爲。根據您是否希望以後與基異常必要條件異常進行互動,你可能想對設置的基地傳入的異常派生類這是建設者,做從該異常您的修改在你的班級裏;多態性將允許該實例重新組合爲基礎異常,以便從那裏進行交互。