69

DaggerButterknifeの違いを指摘できる人はいますか? Butterknife はビュー注入ライブラリであり、Dagger は依存性注入ライブラリであることを知っています。しかし、オンラインのドキュメントは私にとって少しオーバーヘッドがあるようです。Butterknife のドキュメントによると、非アクティビティ インジェクションも実行できますが、これは Dagger が行うことですか? それとも私は何かを誤解しましたか?

4

5 に答える 5

98

ButterKnife は、ビューのみを挿入することを目的としています。非アクティビティ注入とは、ビューを注入するための独自のビュー ルートを提供できることを意味します (手動でインフレートされたビューなど)。ダガーはもう少し複雑です。指定した限り、必要なものを注入できますModule-それらの依存関係を満たすクラス(または、コンストラクター注入を使用できます)。

結論として、ButterKnife は、ビューを作成するためのボイラープレート コードをすべて回避するのに役立つと言えます (別名(TextView)findViewById(R.id.some_text_view);. これ以上はありません。ボンネットの下では、退屈なコードをすべて実行します。したがって、実際にはインジェクションではありません..

また、Jake Wharton はこれら両方のクールなライブラリの開発者の 1 人であることも言及する価値があります :)

ここにいくつかの便利なリンクがあります:

GitHub の Dagger サンプル プロジェクト

Devoxx に関する短剣のプレゼンテーション (Jake Wharton)

Dagger 開発者との Dagger ハングアウト

ButterKnife の便利なリンクはあまりありません。それは本当にシンプルで簡単なので、何も必要ないことを願っています

于 2013-12-29T01:49:38.697 に答える
5

@JakeWharton は、コメントで部分的に回答しています。

TL;DR: それらは互いに補完し合っています。ビューを挿入するにはバターナイフを使用し、残りにはダガーを使用します。

Dagger を使用してビューを挿入しようとすると、非常に苦労することになります :) バター ナイフは、ビューを挿入するのではなく、ビューをバインドする手段と考えるようにしてください。すべての RoboGuice 変換者が Dagger の「ビュー インジェクション」の欠如について不平を言っていたので、私はそれを単にインジェクションと呼びました。決して注射ではありません。答えが言及しているように、それはボイラープレートを減らす方法にすぎません。内部では、あなたのように findViewById を呼び出すだけです!

于 2015-06-19T11:27:29.007 に答える
5

Buterknife のドキュメントへのリンクは次のとおりです。とても簡単です。ただし、ドキュメントには記載されていませんが、Butter Knife の設計が暗示していることは、Butter Knife はカスタム ビューでも使用できるということです。「this」を「context」または「getContext」に置き換えるだけで、スコープを決定できます。

リンク: http://jakewharton.github.io/butterknife/

私のプロジェクトのリスト ビューには、Butter Knife、parcelable、easyAdapter を組み合わせています。理由は定型文が少なく、パーセリング可能な高速でクリーンなパーセリングです。したがって、多数の ListView がある場合は、このアプローチをお勧めします。

リンク:

https://github.com/johncarl81/parceler

https://github.com/ribot/easy-adapter

于 2014-04-22T08:59:27.617 に答える
0

ButterKnife は、クリック リスナーの登録を簡素化し、findViewById()呼び出しによって提供されるボイラープレートを削減するために作成されました。

Dagger と Dagger2 は、汎用の依存性注入システムです。

Guice と MVVM に関するテキストは無視して、 と を読んDependency InjectionThe Android Wayください。これは、ダガーが何をして単純化することを意図しているかにほぼ答えています。

https://spring.io/blog/2011/08/26/clean-code-in-android-applications

于 2016-04-07T19:16:53.713 に答える