web-dev-qa-db-ja.com

DaggerとButterKnifeの違いAndroid

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

64
user2511882

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

結論として、ButterKnifeは、ビューを作成するためのすべての定型コード(別名(TextView)findViewById(R.id.some_text_view);。これ以上何もない。フードの下で、それはまだすべての退屈なコードを行います。だから、それは本当に注射ではありません。

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

便利なリンクを次に示します。

GitHubの短剣サンプルプロジェクト

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

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

便利なButterKnifeリンクがあまりない。それは本当にシンプルで簡単ですので、うまくいけばあなたは何も必要ありません

93
Pavel Dudka

Buterknifeのドキュメントへのリンクはこちらです。とても簡単です。ただし、ドキュメントには記載されていませんが、バターナイフのデザインが示唆しているのは、カスタムビューでもバターナイフを使用できることです。 「this」を「context」または「getContext」に置き換えるだけで、スコープが決まります。

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

私のプロジェクトのリストビューには、バターナイフ、パーセル可能、およびeasyAdapterを組み合わせています。理由は定型文が少なく、小包がより速く、よりきれいに小包できることです。したがって、ListViewが多数ある場合は、このアプローチをお勧めします。

リンク:

https://github.com/johncarl81/parceler

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

5
greenspand

@ JakeWharton'sはコメントで部分的に答えています:

TL; DR:互いに補完します。ビューの挿入にはバターナイフを使用し、残りの部分にはダガーを使用します。

Daggerを使用してビューを挿入しようとすると、非常に悪い時間を過ごすことになります:)バターナイフは、挿入ではなくビューをバインドする手段として考えてみてください。すべてのRoboGuice変換者がDaggerの「ビューインジェクション」の欠如について不平を言っていたので、私はそれをインジェクションと呼びました。それは本当に注入ではありません。答えが言及しているように、それは定型文を減らすための単なる方法です。ボンネットの下では、findViewByIdを呼び出すだけです。

4
serv-inc

違いは非常に単純です:バターナイフa dagger 無限に鋭くないだけです
ドキュメントで指摘されているとおり。

4
naXa

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

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

GuiceとMVVMのテキストを無視し、Dependency InjectionおよびThe Android Way。これは、Daggerが何を行い、単純化することを意味しているのかをほぼ答えています。

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

0
EpicPandaForce