Разница между кинжалом и ButterKnife Android

Может ли кто-нибудь указать на разницу между кинжалом и бабочкой? Я знаю, что Butterknife представляет собой библиотеку для инъекций, а кинжал представляет собой библиотеку инъекций зависимости. Но документация в Интернете кажется немного накладными для меня. Согласно документации Butterknife, вы можете делать инъекции без активности, что и делает кинжал? Или я что-то не понял?

http://square.github.io/dagger/

http://jakewharton.github.io/butterknife/

Ответ 1

ButterKnife предназначен только для ввода представлений. Неинъекционная инъекция просто означает, что вы можете предоставить свой собственный корень вида, чтобы вводить представления из (например, с помощью раздутых вручную видов и т.д.). Кинжал немного сложнее. Он может вводить все, что угодно, если вы указали Module - класс, который удовлетворяет этим зависимостям (в качестве альтернативы вы можете использовать инъекцию конструктора).

В качестве нижней строки - я бы сказал, что ButterKnife помогает вам избежать всего этого шаблона кода для создания просмотров (aka (TextView)findViewById(R.id.some_text_view);). Ничего больше. Под капотом он все еще делает весь этот скучный код. Так что это не действительно инъекция..

Также стоит упомянуть, что Джейк Уортон является одним из разработчиков для обоих этих классных библиотек:)

Вот несколько полезных ссылок:

Проект образца кинжала на GitHub

Представление кинжала на Devoxx (Джейк Уортон)

Контраст кинжала с помощью Dagger

Не так много полезных ссылок ButterKnife. Это действительно просто и прямо вперед, так что, надеюсь, вам не понадобится

Ответ 2

Вот ссылка на документацию Buterknife. Это очень просто. Однако, что документация не говорит, но дизайн Butter Knife подразумевает, что вы также можете использовать Butter Knife в пользовательских представлениях. Просто замените "this" на "context" или "getContext", чтобы определить область действия.

Ссылка: http://jakewharton.github.io/butterknife/

Я сочетаю Butter Knife, parcelable и easyAdapter для просмотра списка в моем проекте. Причина менее условная и с более быстрым и чистым пакетированием. Поэтому, если у вас много ListViews, я рекомендую этот подход.

Ссылки:

https://github.com/johncarl81/parceler

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

Ответ 3

Разница довольно проста: Масляный нож похож на кинжал только бесконечно менее остро.
Как указано в документации.

Ответ 4

@JakeWharton частично отвечает на комментарий:

TL; DR: Они дополняют друг друга. Используйте Butterknife для инъекций видов, Кинжал для остальных.

Если вы используете Кинжал, чтобы попытаться ввести представления, у вас будет очень плохое время:) Попытайтесь вспомнить Butter Knife как средство привязки взглядов а не инъекции. Я только назвал это инъекцией, потому что все Революторы RoboGuice жаловались на отсутствие "просмотра инъекций", с кинжалом. Это не совсем инъекция. Как ответ упоминает, что это просто способ уменьшить шаблон. Под капотом это просто вызывая findViewById, как и вы!

Ответ 5

ButterKnife был создан, чтобы упростить регистрацию прослушивателей кликов и уменьшить шаблон, предоставленный вызовами findViewById().

Кинжал и Кинжал2 - системы впрыска в зависимости от общего назначения.

Игнорируйте текст в Guice и MVVM и прочитайте Dependency Injection и The Android Way. Это в значительной степени отвечает тому, что Кинжал должен делать и упрощать.

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