0

エラーコードを定義する「正しい方法」はありますか? つまり、私はカスタム例外をスローするライブラリを少し前に構築しましたが、カスタム エラー メッセージは開発者の観点に的を絞っています。現在、GUI を完成させていますが、これらの例外をキャッチしたら、よりユーザー フレンドリーなメッセージが必要です。それ自体は問題ではありませんが、たとえば、ReceiverNotAvailableException 例外と NoMessageReceivedException があるとします。開発者である私にとっては、これらはまったく別のことを意味し、異なる内部メッセージを持っていますが、エンド ユーザーにとっては、単に「ユーザーが見つかりません」という意味です。「ユーザーが見つかりません (エラー X)」のようなものを表示したいと思います。X は、発生した例外によって異なります。

私の質問は、例外の種類に応じて X=1、2 などを使用する必要があるか、何らかの理由でより複雑なものを選択する必要があるかということです。ばかげた質問のように聞こえるかもしれませんが、この場合の「ベスト プラクティス」(この用語はあまり好きではありません) とは何かを知りたいと思います。

ところで、もちろん、各コードを対応する例外にマッピングするテーブルが必要です。

4

1 に答える 1

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 (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 でより一般的ですが。

于 2011-07-19T12:44:06.597 に答える