Google Guice for Dependency Injectionをいじって、既存のアプリケーションに統合し始めました。ここまでは順調ですね。依存関係に加えて、文字列、データソースなどを必要とする多くのクラスがあります。NamedBindingsがあることは知っていますが、クラスごとにコンストラクターに渡さなければならない単純な文字列ごとにアノテーションを作成したくはありません。次に、AssistedInjectと呼ばれるものがあり、ファクトリの実装を作成してくれます。うわー、しかし私はまだ工場のインターフェースを定義する必要があります。依存関係があるクラスでは問題ありませんが、このサンプルクラスについてはどうでしょうか。
public class FooBarClass {
public FooBarClass(String name, String anotherOne) {
// Some stuff
}
}
Guiceの使い方、より一般的にはDIの正しい使い方がわからない場合があります。「よく耳にしますが、XYZフレームワークは新しいものです。」しかし、これは暗黙のうちに、DIフレームワークを使用してすべてのインスタンスを作成する必要があることを意味します。
必要なインスタンスは1つだけです
このクラスのインスタンスが1つだけ必要な場合はどうなりますか?このクラスには、2つの文字列以外に依存関係はまったくありません。一度だけインスタンス化され、シャットダウンフックとしてJVMに渡されるシャットダウンフックについて考えてみてください。Guiceでこのインスタンスを作成する必要がありますか?注入するものがないため、これは非常に馬鹿げているように見えますが、Guideの両方のパラメーターを渡すためのファクトリインターフェイスを作成し、FooBarClassがDIを使用するためのインターフェイスを作成する必要があります。
複数のインスタンスが必要です
このクラスの複数のインスタンスが必要な場合にも同じことが当てはまります。依存関係はありませんが、何も得られないようにボイラープレートコードをたくさん作成する必要があります。これは私には間違っているようです。
では、DIやGuiceをどのように使用することになっていますか?
どうもありがとう!