Google Guiceについて読み、依存性注入に対する他のアプローチの一般的な問題を理解しましたが、Guiceを「実際に」使用してその価値が明らかになる例はまだ見ていません。
誰かがそのような例を知っているかどうか疑問に思いますか?
Google Guice を使用して単体テストを容易にすることは、高レベルの利点にすぎません。プロジェクトで単体テストを使用していない人もいます。人々は単体テスト以外にも Spring/Dependency Injection を使用しています。
Google Guice を使用する低レベルの利点は、アプリケーションの結束の問題であり、プロジェクト内のクラスは互いに疎結合できます。互いに依存することなく、別のクラスにクラスを提供できます。
次の例を検討してください。
public class A {
}
public class B {
A a = new A();
}
クラス B はクラス A に密結合されます。つまり、クラス A の存在に依存します。
しかし、Guice を使用すると、代わりに次のように疎結合にすることができます。
public class B {
private A a;
@Inject
public B(A a) {
this.a = a;
}
}
ClassB
は と疎結合にA
なり、Guice は のインスタンスをインスタンス化するA
代わりに提供する責任を負いB
ます。A
これにより、 toのインターフェイスを提供するように拡張できB
ます。アプリの単体テストを行う場合は、実装を Mock オブジェクトにすることができます。
ここまでは、依存性注入の利点についてのみ説明しています。依存性注入以外に、Google Guice を使用する利点は次のとおりです。
@Inject
注釈コンストラクターを追加するだけです。その概要です。しかし、Guice に慣れるにつれて、Guice にはさらに多くの利点があります。簡単な実際の例として、MVP 実装で GWT を使用している場合、GWTアプリケーションのコンポーネント/ウィジェットは非常に疎結合であり、互いに緊密に統合されていません。
時間をさかのぼって、Guice が解決したかった問題を詳しく調べる必要があるかもしれません。Guice の背後にある動機を理解するには、TheServerSide.COM のBob Lee: I Don't Get Springニュース (およびそのコメント) が最適な出発点です。次に、Google Guice、A Java Dependency Injection Framework (およびコメント) の発表と、Tech Talk: Bob Lee on Google Guice (およびコメント) に進みます。
個人的には、邪悪な XML に関する懸念を共有していました。XML 構成の地獄、XML と実行時エラーの可能性、エラーが発生しやすく、リファクタリングに不利な文字列識別子などです。実際、Spring と同時実行に対する懐疑的な意見は、誰にとっても良いことだと思います (春を含む)。このように、DI フレームワークの風景、特に Java 5 の機能 (型の安全性のためのジェネリックと注釈) を活用する最新のフレームワークに新しいプレイヤーが登場したことを嬉しく思います。
また、Google はミッション クリティカルなアプリケーションで Guice を実行しているため (ほとんどすべての Java ベースのアプリケーションは Guice ベースのアプリケーションでもあります: AdWords 、Google Docs、Gmail、さらには YouTube でさえGuice²の「クレイジー」Bob Lee によって報告されています)。 Guice が完全に間違っていて、何の価値も提供していないとは思いません。悲しいことに、Google がこれらのアプリケーションのコードを例として提供するとは思えません... しかし、Guice を使用するアプリケーションのリストやサードパーティの Guice アドオンのリストに興味深いものがあるかもしれません。または、Guice²で言及されている本を調べてください。またはボブに聞いてください:)
インターフェイス、テスト、およびプロキシへのコーディングには利点があると思います。
インターフェイスへのコーディングは、コードを適切に階層化するのに役立ち、テスト用のモックを挿入できるようにし、プロキシを自動的に生成できるようにするため、クライアント コードは実装について心配する必要がありません。
これは、Guice、Spring、PicoContainer、およびすべての DI フレームワークに当てはまります。
十分に簡潔ですか?