1

多くの例外クラスがあります。Fe: InvalidMethodParameterException、EntityNotFoundException など。すべて xxx.yyy.zzz のようなコードと記述リテラルがあります。問題は、クラスとそのコード/リテラル​​を整理するためのベスト プラクティスとテクニックがあるかどうかです。今のところ、私が行っている方法は、すべてのコードとリテラルを他のクラスやプロパティ ファイルに配置することです ((. 1 つの例外を追加するには、1 つではなく他のファイルに別の変更を加える必要があるため、非常にイライラするように見えます)。 . そして例外をスローするには, それらをスローする静的メソッドを持つクラスを使用します. これらのメソッドとアプローチは私が作成したのではなく, 私が働いているところです. そこで, 他のより効率的なアプローチを提供したいと思います. 例えば各例外リテラルとコードを独自のクラス内に格納するだけで使用するように提案されましたが、彼らはそれを言って無視しました。

どんな助けでも大歓迎です!

4

2 に答える 2

1

前者は後者を簡単に包含することができるため、開発者の効率を促進するシステムアーキテクチャは、実行の効率を促進するシステムアーキテクチャよりもはるかに優れていると私は主張します。1 つのモジュールを変更するために複数のモジュールを開いて変更する必要がある場合、設計は開発者の効率を向上させません。私の非常にお気に入りのプログラミングの本では、例外の種類は例外ハンドラーによって動機付けられることを推奨しています。次のようなもの:

Version 1:
void tryToDoSomething(bool arg) {
    try {
        doSomething(arg); //Throws MyException
    } catch (MyException e) {
        if (e.errorMessage == "Try a different argument")
            tryToDoSomething(!arg);
        else if (e.errorMessage == "Try again")
            tryToDoSomething(arg);
    }
}
Version 2:
//Split the exception so that it can be handled differently
void tryToDoSomething(bool arg) {
    try {
        doSomething(arg); //Throws InvalidArgumentException, NotReadyException
    } catch (InvalidArgumentException e) {
        tryToDoSomething(!arg);
    } catch (NotReadyException e) {
        tryToDoSomething(arg);
    }
}

最新のコンパイラは、自己文書化に加えて、バージョン 2 を大幅に高速化するためにスローを最適化できます。これが実際に例外が作成された理由です。これは、手動で渡してチェックする必要があった以前の鈍いエラー コードを置き換えるためにコンパイラが理解できるユーザー定義型としてです。

とにかく、エラーコードがユーザーに届くように設計されている場合、それらは例外ではなくエラーであり、そのようにスローされるべきであると主張します. おそらく、文字列エラー コードを受け取り、正しい派生型をスローする ErrorFactory のようなものを設計するか、直接スローすることができます。一方、エラー コードがユーザーに届かない場合、わざわざ使用する必要はありません。

于 2012-04-12T18:00:11.257 に答える
0

それらすべてを 1 つのクラスに集中させることができます。これにより、すべてが 1 つの外部クラスに配置されます。

public OurExceptionsClassTM {

    static final String
        ERROR1 = "123.acd.243",
        ERROR2 = "124.axd.543",
        ... ;

    public static class InvalidMethodParameterException extends Exception { ... }
    ...

    public static throwSpecialException(){ ... }
    ...

}

これにより、複数のファイルを変更しなければならないという問題が解決され、多かれ少なかれ、同僚が慣れ親しんでいる方法が維持されます。

たとえば、プロジェクトごとに異なる外部拡張クラスを用意するなどして、もう少しモジュール化することもできます。ポイントは、特定の例外に関連するすべてのものは、その例外と一緒に残るということです。

于 2012-04-12T17:16:14.930 に答える