Dagger と Butterknife の違いを誰でも指摘できますか? Butterknifeはビューインジェクションライブラリであり、Daggerは依存性インジェクションライブラリであることを知っています。しかし、オンラインのドキュメントは私にとって少しオーバーヘッドのようです。 Butterknifeのドキュメントによると、非アクティビティ注入も実行できますが、これはDaggerが行うことです。または、私は何かを誤解しましたか?
ButterKnifeは、ビューの挿入のみを対象としています。非アクティビティインジェクションとは、ビューをインジェクトするための独自のビュールートを提供できることを意味します(手動で拡大したビューなど)。ダガーはもう少し複雑です。 Module
-これらの依存関係を満たすクラスを指定する限り、必要なものを注入できます(あるいは、コンストラクター注入を使用できます)。
結論として、ButterKnifeは、ビューを作成するためのすべての定型コード(別名(TextView)findViewById(R.id.some_text_view);
。これ以上何もない。フードの下で、それはまだすべての退屈なコードを行います。だから、それは本当に注射ではありません。
また、Jake Whartonは両方のクールなライブラリの開発者の1人であることに言及する価値があります。
便利なリンクを次に示します。
Devoxx(Jake Wharton)の短剣プレゼンテーション
便利なButterKnifeリンクがあまりない。それは本当にシンプルで簡単ですので、うまくいけばあなたは何も必要ありません
Buterknifeのドキュメントへのリンクはこちらです。とても簡単です。ただし、ドキュメントには記載されていませんが、バターナイフのデザインが示唆しているのは、カスタムビューでもバターナイフを使用できることです。 「this」を「context」または「getContext」に置き換えるだけで、スコープが決まります。
リンク: http://jakewharton.github.io/butterknife/
私のプロジェクトのリストビューには、バターナイフ、パーセル可能、およびeasyAdapterを組み合わせています。理由は定型文が少なく、小包がより速く、よりきれいに小包できることです。したがって、ListViewが多数ある場合は、このアプローチをお勧めします。
リンク:
@ JakeWharton'sはコメントで部分的に答えています:
TL; DR:互いに補完します。ビューの挿入にはバターナイフを使用し、残りの部分にはダガーを使用します。
Daggerを使用してビューを挿入しようとすると、非常に悪い時間を過ごすことになります:)バターナイフは、挿入ではなくビューをバインドする手段として考えてみてください。すべてのRoboGuice変換者がDaggerの「ビューインジェクション」の欠如について不平を言っていたので、私はそれをインジェクションと呼びました。それは本当に注入ではありません。答えが言及しているように、それは定型文を減らすための単なる方法です。ボンネットの下では、findViewByIdを呼び出すだけです。
ButterKnifeは、クリックリスナーの登録を簡素化し、findViewById()
呼び出しによって提供されるボイラープレートを削減するために作成されました。
DaggerとDagger2は、汎用の依存性注入システムです。
GuiceとMVVMのテキストを無視し、Dependency Injection
およびThe Android Way
。これは、Daggerが何を行い、単純化することを意味しているのかをほぼ答えています。
https://spring.io/blog/2011/08/26/clean-code-in-Android-applications