42

Google Guiceについて読み、依存性注入に対する他のアプローチの一般的な問題を理解しましたが、Guiceを「実際に」使用してその価値が明らかになる例はまだ見ていません。

誰かがそのような例を知っているかどうか疑問に思いますか?

4

3 に答える 3

46

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 を使用する利点は次のとおりです。

  1. Guice には、コンストラクター インジェクションの非常にクリーンな実装があります。例からわかるように、@Inject注釈コンストラクターを追加するだけです。
  2. Guice には、同じアノテーションを使用したセッター インジェクションもあります。
  3. そうは言っても、注釈ベースのインジェクションは、他の DI 実装のような XML ベースのインジェクションと比較して非常にクリーンなアプローチです。
  4. 依存関係の注入と構成はすべて Java を使用しているため、デフォルトでアプリケーションの型安全性が保証されます。
  5. Guice には、アスペクト指向プログラミングの非常に軽量な実装があります (または、それを AOPAlliance AOP 実装のラッパーとして呼び出すこともできます)。そして、それの良いところは、スタブなどを生成しないことです。

その概要です。しかし、Guice に慣れるにつれて、Guice にはさらに多くの利点があります。簡単な実際の例として、MVP 実装で GWT を使用している場合、GWTアプリケーションのコンポーネント/ウィジェットは非常に疎結合であり、互いに緊密に統合されていません。

于 2009-09-23T02:22:34.917 に答える
19

時間をさかのぼって、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²で言及されている本を調べてください。またはボブに聞いてください:)

于 2009-09-23T04:07:19.787 に答える
4

インターフェイス、テスト、およびプロキシへのコーディングには利点があると思います。

インターフェイスへのコーディングは、コードを適切に階層化するのに役立ち、テスト用のモックを挿入できるようにし、プロキシを自動的に生成できるようにするため、クライアント コードは実装について心配する必要がありません。

これは、Guice、Spring、PicoContainer、およびすべての DI フレームワークに当てはまります。

十分に簡潔ですか?

于 2009-09-23T00:12:34.517 に答える