14

例外内でエラー コードを使用してエラー タイプを指定しても問題ないと思いますか? このコードを見てください:

public class MyException extends Exception {
    public static final String ERROR_CODE_INVALID_NAME = "";
    public static final String ERROR_CODE_INVALID_ID = "";
    ...

    private String errorCode;

    public MyException(String message, String errorCode) {
        super(message);
        this.errorCode = errorCode;
    }

    public String getErrorCode() {
        return errorCode;
    }
}

この例では文字列ではなく列挙型を使用した方がよいことはわかっていますが、実際にはエラー コードの概念が気になります。ここでは例外階層の方が良いと思いますか? 例外内のエラー コードがアンチパターンであるという信頼できる情報源が見つかりません。どうも。

4

5 に答える 5

8

エラー コードは次の場合に役立ちます。

  • 完全なエラー メッセージを表示できない (食器洗い機の表示)
  • コードは内部で処理する必要があります (特定のコードが表示された場合、またはクライアントがメッセージを担当しているときにサーバーがクライアントにエラー コードを送信した場合、いくつかのロジックがトリガーされます)
  • 優れたマニュアルがあり、ユーザーはコードを使用して包括的な情報を取得できます
  • ユーザーは何が起こったかを知る必要はありませんが、ベンダーに連絡する必要があります

そのため、ほとんどの場合、エラー コードに付加価値は見られません。私は、ログファイルにある場合 (プログラマーが会社を辞めてから 2 年後であっても)、本当に役立つ例外階層または少なくとも明確なエラー メッセージを好みます。

エラーコードの要件がある場合 - 解決策は悪くありません。完全なセットを簡単に交換できるように、すべてのエラー コードを中央リポジトリ (プロパティ ファイル) に収集することを検討してください。

myexception.ERROR_CODE_INVALID_NAME=text or number
myexception.ERROR_CODE_INVALID_ID=text or number
于 2012-02-15T10:48:24.770 に答える
4

私の経験から、例外コードは主にユーザーへの情報メッセージとして使用されます。

エラーコードに応じて異なる反応を示すために、誰かが一般的な例外メッセージを解析しようとすることを一度も見たことがありません。通常、それは例外階層を介して行われます。

別の方法では、特定のケースごとに新しい例外サブクラスを作成するのが難しく、例外コードが使用されます。
たとえば、ユーザー コードの場合、トランザクションが失敗した理由を測定しない場合は、何らかの方法でロールバックする必要がありますが、エンド ユーザーにとっては、それが発生した理由 (間違ったパラメーター、データベース接続など) が重要です。

要約すると、さまざまな状況を処理するさまざまな方法を期待している場合は、さまざまな例外タイプを使用することをお勧めしますが、同じ方法でいくつかの問題を処理し、特定の原因についてのみユーザーに通知する必要がある場合は、例外コードを使用する方が簡単です。

于 2012-06-29T16:46:48.820 に答える
2

複雑な例外階層のスタックトレースをパフォーマンス的に作成することは、メモリと時間の両方の観点から非常にコストがかかるため、3〜4個の静的エラーコードで解決できるものに対して複雑なカスタム例外階層を作成する場合は、エラーが望ましいです。コードオプション。一般に、ランタイム例外(メソッドシグネチャでチェックインされていない)を使用することを好みます。チェックされた例外をキャッチする防御的なアプローチは、IMOより少し古くなっています。

于 2012-02-15T10:52:34.240 に答える
1

例外の原因(無効な名前または無効なID)に応じて(コードで)異なる反応をしたい場合は、異なる例外を設定することをお勧めします。

そうでない場合は、getErrorCode()メソッドも必要ありません。例外のメッセージにエラーコードを追加するだけで、例外によってデバッグに必要なすべての情報が得られます。

于 2012-02-15T10:53:15.427 に答える