2011-07-19 7 views
0

エラーコードを定義する "正しい方法"はありますか?私は、カスタム例外をスローする前にライブラリを構築しましたが、カスタムエラーメッセージを開発者の立場でターゲットにしました。今、私はGUIをラッピングしています。その例外をキャッチすると、より使いやすいメッセージが必要になります。それ自体は問題ではありませんが、私は自分のReceiverNotAvailableException例外とNoMessageReceivedExceptionを持っているとしましょう。私にとっては、開発者として、彼らはまったく異なるものを意味し、内部のメッセージが異なりますが、エンドユーザーにとっては「ユーザーが見つかりません」という意味です。私は何か例外が発生したかどうかによってXが変わる "User not found(error X)"のようなものを表示したいと思います。エラーコードの定義

私の質問は:どのような種類の例外に応じてX = 1,2などにすればいいですか、何らかの理由でもっと複雑なものを選ぶべきですか?私はそれがちょっとした疑問のように聞こえることを知っていますが、私は本当にこのベスト・プラクティス(これほど好きではない)が何であるかを知りたいのです。

もちろん、それぞれのコードを対応する例外にマッピングするテーブルがあります(どちらの場合でも)。

答えて

3

例外が重複しない場合は、HashTable [ExceptionName] = "Error Message"と表示されても問題ありません。重複することができますメッセージコードを定義する標準的な方法(これは、同時に発生)2のべき乗を使用することです

:彼らはあなたには、以下のようなものを使用することができた場合

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

とそうです。

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 

と、上すると、コードにあなたができる受信側で、最後に

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

を行うことができますチェックコード

1100 & 0100 = 0100 

ここで例外を使用している場合は、例外が発生している限りerrorCodeをバブリングすることができます。このイディオムはC言語でより一般的ですが