私は長い間、ハンドラからモジュールを切り離すためにリフレクションを使用してきました。反射をguiceで置き換えるにはどうしたらいいですか?
私はこのように設計されたコードベースがあります後、私のコードに続い
static enum AnimalHandlers {
Dog(Dog.class),
Cat(Cat.class);
private final Class c;
AnimalHandlers(Class class)
{
this.c=class;
}
public Class getAnimalHandler()
{
return c;
}
}
を、私はそれを取得し、入力として「動物」列挙型を取り、リフレクションを使用する方法(つまりを有しますenumのクラスを呼び出して "newInstance"を呼び出して)、必要なハンドラを呼び出します。
私は解決策がGuiceとのよりクリーンであると思う。どのようにしてenum/reflectionを取り除き、guiceを使用してコントロールモジュールをドメイン固有のロジックハンドラで "水和"することができますか?
あなたの例は実際のコードよりも単純すぎるかもしれませんが、これは単に 'new'を使うだけではなく、なぜ構造化されているのでしょうか?なぜ反射を使うのですか? – aparker42
なぜなら、動物はさまざまな種類の動物であり、それらの大きなリストが異なるハンドラに制御を移すクラスに送られると想像してください。処理される動物の種類に依存するif文が必要です(ブロックにはいくつかの新しい文が含まれている必要があります)ので、動物を介してループを繰り返すロジックを動物自身に結びつけ、維持できないシステムにつながります。複数の開発者が簡単に拡張することはできません....そして、テストするのが難しいです。 – jayunit100
正直言って、あなたのenumベースの解決策はそれほど悪くないと思います。ハンドラクラスをステートレスにすることができれば、すべての列挙定数に対して1つのインスタンスしか持たなくてもかまいません。 –