Android 用の Guice を使用することに意味はありますか?
質問
私は、非常に複雑で多くのビジネス ロジックを含む Android プロジェクトで guice を使用することについて議論しています。Guice は適切に思えますが、深く読み始めると、必要以上に複雑に見え始めます。
私が理解できないことの 1 つは次のとおりです。Guice がそれほど優れており、Java コードを記述するための最良の方法であるなら、Guice を使用する Android コードがこれほど少ないのはなぜでしょうか...そしてなぜ Google は社内で Android 用に Guice を使用しなかったのでしょうか?
解決
依存関係インジェクションフレームワークの強みを実証することの問題は、シンプルなHello Worldアプリケーションでそれを達成することができないことです。これらのフレームワークは、多くの複雑さを備えた大きなシステムでのみ価値を示しています。また、彼らは何らかの形で急な学習曲線を持っています。
したがって、十分なチュートリアルを見つけることができないことは非常に普通です - Guiceを使用するオープンソースプロジェクト。これは、公開されないエンタープライズアプリケーションで最も頻繁に使用されます。
GoogleがGuiceを使用しない理由として、Guiceはどこにでも収まりません。パフォーマンスのオーバーヘッドを追加し、必要ない場所で使用することは意味がありません。
他のヒント
Guice を使用するのは完全に理にかなっていて、実際に多くのアプリケーションで使用されています。拡張機能 RoboGuice は、Android の使用を非常に生産的にするいくつかの優れた機能を追加します。
実際、これなしで Android アプリを作成することは想像できません。痛すぎる。
Web サイトで Roboguice を使用するアプリへのリンクを確認してください (例:Google ドキュメント、OpenTable...)。また、Square アプリのような他のアプリも Guice を直接使用することが知られています。
それは完全に理にかなっています..行ってやってみろ!
Robolectric と併用すると、テスト作業も容易になります。
追伸:私は RoboGuice のコミッターなので偏屈です ;-)
PPS - 2013 年 6 月:最近の開発により、ビルド時にほとんどの作業を実行するため、ランタイム リフレクションによるパフォーマンスへの影響 (Android では遅い) が回避され、パフォーマンスが重要な作業により適した他のアノテーション/依存性注入ベースのフレームワークが誕生しました。興味がある場合は、Dagger と AndroidAnnotations を参照してください。
実際、Googleは、メモリオーバーヘッドのためにAndroidアプリケーションでGuiceまたはRoboguiceを使用していることを思いとどまらせています。
ソース:
http://developer.android.com/training/articles/memory.html#dependencyinjection
5.11.2014編集:
Android用の専用の高速依存噴射ライブラリがあります。私はそれを使用している人々をますます見ることができます:
http://square.github.io/dagger/
13.04.2015編集:Googleは独自のバージョンのDaggerをリリースしました。http://google.github.io/dagger/
あなたはあることを知っています roboguice? AndroidのGuiceです。