2011-07-19 52 views
0

有沒有一種「正確的方式」來定義的錯誤代碼?我的意思是,我前一段時間建立了一個庫,可以引發自定義異常,但我將自定義錯誤消息的目標定位於開發人員的立場。現在我正在封裝GUI,當我捕獲這些異常時,我需要更多用戶友好的消息。這本身並不是問題,但是讓我們說,我有我的ReceiverNotAvailableException異常和NoMessageReceivedException。對我來說,作爲開發者,他們意味着完全不同的東西,並且具有不同的內在信息,但對於最終用戶,他們只是表示「用戶未找到」。我想顯示「找不到(錯誤X)的用戶」,其中X取決於引發的異常而變化 - 如果你問我,這很常見。定義錯誤代碼

我的問題是:我應該去用X = 1,2等等取決於什麼異常的種類或我應該選擇更復雜的東西不管是什麼原因?我知道這聽起來像一個愚蠢的問題,但我真的很想知道在這種情況下「最佳做法」(我不喜歡這個詞)。

順便說一句,當然,我想有一個表映射每個代碼到其相應的異常,取其的情況下。

回答

3

如果你的異常不能重疊,然後用哈希表[ExceptionName] =「錯誤消息」走出看起來像一個明智的選擇。如果他們可以,你可以使用類似以下內容:

的標準方法來定義可以重疊(這是發生在同一時間)消息代碼是使用的兩個大國:

define ERROR_SYSTEM_DOWN 1 
define ERROR_DATABASE_UNREACHABLE 2 
define ERROR_SPACE_UNAVAILABLE 4 
define ERROR_DISK_DIED 8 

和等等。然後,在代碼中,你可以做

if (disk_died() && no_space()) { 
    int errorCode = ERROR_DISK_DIED | ERROR_SPACE_UNAVAIABLE; //Binary or 
    return errorCode; 
} 

最後,在接收端,您可以:

if (errorCode & ERROR_DISK_DIED == ERROR_DISK_DIED) { //Binary and 
    //then, at least, disk died. You can check for the rest in the same way 
} 

說明:

ERROR_SYSTEM_DOWN = 0001 
ERROR_DATABASE_UNREACHABLE = 0010 
ERROR_SPACE_UNAVAILABLE = 0100 
ERROR_DISK_DIED = 1000 

然後

1000 | 0100 = 1100 

,並在檢查代碼爲

1100 & 0100 = 0100 

現在,如果您使用的是異常,則可以使用相同的方法,只要出現異常就會冒泡出errorCode。雖然這個成語是多見於C.

相關問題