2016-09-25 3 views
19

私の知る限り、Daggerはコードを生成しますが、GuiceとSpringは実行時処理に依存しているため、Daggerはより速く動作しますが、プログラマー側でより多くの作業が必要です。パフォーマンスの面で、モバイル(Android)開発に適しています。春と短剣があるとき、Guiceを使用/開発する理由は?

しかし、GuiceとSpringが残っていると、後者には多くの統合があります。 Spring Framework(基本的に同じことですが、より簡単なデータベースアクセスを提供する)を使用できる場合、Guiceの開発/使用のポイントは何ですか?

Googleは、独自のDIツールを作成して、Spring Frameworkを使用するのではなく(おそらく貢献している)、ホイールを再発明しようとしていませんか?

私はDIツールを選ぶことによって導く決定木を探しています。

+1

SOは、ソフトウェア製品の推薦/比較に関するものではありません。私は、あなたの質問が本当にここでは控え目だと思う。 – GhostCat

+0

春は巨大で巨大なコレクションで、ライブラリやユーティリティです。 DIフレームワークはほんの一部です。 Guiceは軽量で、DIフレームワークのみです。さらに、GWT(たとえば)はJavaScriptにコンパイルされているため、Springを使用することはできません。なぜ、Springが[CDI](https://docs.oracle.com/javaee/6/tutorial/doc/giwhl.html)を改革しているのかを知ることができます。 –

+2

@GhostCat ok、だから私はそれについて尋ねるべきですか? – spam

答えて

65

それはダガーが広場に彼の移動後のGuiceのクリエイター("Crazy Bob" Lee)のいずれかによって、Guiceの後に作成されたことを認識することが重要です。

  • 春は、もともとOctober 2002にリリースされました。
  • Googleが元々Guiceを公開したのはMarch 2007です。
  • JSR-330javax.inject注釈はOctober 2009であり、Google(Bob Lee)、Spring、および他の業界プレイヤーからの情報が豊富です。
  • 正方形はもともとダッガー1を公にMay 2013に公開しました。
  • Googleは元々、ダガー2を公にApril 2015に公開しました。
  • ダガー1は廃止予定10日前、September 15, 2016にマークされています。その意味で

、Guiceのの継続的なキュレーションではありません徹底的ダガーのいずれかのバージョンを以前から長時間実行し、広く消費ソフトウェアパッケージのメンテナンスほど「車輪の再発明」。上記の違いをリストして修正するには:

  • Springは、多くの統合、XML設定言語、および実行時/反映バインディングを持つ比較的重量のあるフレームワークです。 Springを既に使用しているアプリケーションは、Springの依存性注入フレームワークを非常にわずかな作業で使用できます。
  • Guiceは、比較的軽量なフレームワークで、統合、Javaインスタンス構成、および実行時/反映バインディングが少なくなっています。 Javaバインディングを使用すると、コンパイル時の型チェックとIDEオートコンプリートの統合が可能になります。
  • Daggerは、非常に軽量なフレームワークで、統合、Javaインターフェイス/注釈設定、およびコンパイル時コード生成バインディングがほとんどありません。コード生成の面では、Daggerは全体的に、特にリソースが限定されたモバイル環境では非常に優れたパフォーマンスを発揮します。
  • 上記の3つのフレームワークはすべてJSR-330をサポートしているため、よく作られたライブラリやアプリケーションは、使用されるDIコンテナにほとんど影響を受けません。

これ以外にも、使用するフレームワークの中でメンテナンス/廃止のパターンとポリシーを見守りますが、チームの技術的判断と合わせて必要な統合とパフォーマンスに任せてください。

+0

あなたのおかげで多くの感謝、それは多くのものに私の目を開いた。実際、Guiceを呼び戻すことは大きなミスです。これらの3つのフレームワークがすべて同じ標準を実装していれば、それは可能ですか? Springの代わりにDagger Lightweight DIを使用しますが、同時にSpringの統合(Spring Dataなど)を維持しますか? – spam

+3

@ spamあなたは答えがよかったのでうれしいよ!私はSpring Dataを調べていませんが、あるフレームワークの統合を別のフレームワークで使用できるとは必ずしも思えません。 JSR-330で定義されているように等価的にDIを処理していますが、フレームワークの中には内部データ構造やリフレクション/イントロスペクションがあり、他の場所では利用できません。あなたはSpring vs Daggerの利用を利用可能にした統合の中で、その利用を評価する必要があります。 –

+4

これは良い答えです。あなたは、サードパーティのDIフレームワークの主要プレーヤーの貴重な要約に基づいて意見を述べることができました。 +1! –

関連する問題