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