web-dev-qa-db-fra.com

Différence entre Dague et ButterKnife Android

Quelqu'un peut-il souligner la différence entre Dagger et Butterknife ? Je sais que Butterknife est une bibliothèque d'injection de vue et Dagger est une bibliothèque d'injection de dépendance. Mais la documentation en ligne me semble un peu lourde. Selon la documentation de Butterknife, vous pouvez également effectuer des injections sans activité. Que fait Dagger? Ou ai-je mal compris quelque chose?

64
user2511882

ButterKnife a pour objectif d'injecter uniquement des vues. L'injection de non-activité signifie simplement que vous pouvez fournir votre propre racine de vue pour y injecter des vues (comme avec des vues gonflées manuellement, etc.) . La dague est un peu plus compliquée. Il peut injecter tout ce que vous voulez tant que vous avez spécifié Module - classe qui satisfait ces dépendances (vous pouvez également utiliser l'injection de constructeur).

En résumé, je dirais que ButterKnife vous aide à éviter tout ce code standard pour créer des vues (alias (TextView)findViewById(R.id.some_text_view);. Rien de plus. Sous le capot, il fait tout ce code ennuyeux. Ce n’est donc pas vraiment une injection.

Il est également intéressant de mentionner que Jake Wharton est l’un des développeurs de ces deux libs cool :)

Voici quelques liens utiles:

Exemple de projet Dagger sur GitHub

Présentation de la dague sur Devoxx (Jake Wharton)

Hangout Dague avec Dagger devs

Ne pas avoir beaucoup de liens utiles ButterKnife. C'est vraiment simple et direct, donc j'espère que vous n'en aurez pas besoin

92
Pavel Dudka

Voici un lien vers la documentation de Buterknife ... C'est très simple. Cependant, ce que la documentation ne dit pas, mais la conception de Butter Knife implique que vous pouvez également utiliser Butter Knife dans des vues personnalisées. Il suffit de remplacer "this" par "context" ou "getContext" afin de déterminer la portée.

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

Je combine Butter Knife, parcelable et easyAdapter pour les vues de liste de mon projet. Reason est moins complexe et permet une parcellisation parcellaire plus rapide et plus propre. Donc, si vous avez beaucoup de ListViews, je recommande cette approche.

Liens:

https://github.com/johncarl81/parceler

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

4
greenspand

@ JakeWharton y répond partiellement dans le commentaire:

TL; DR: Ils se complètent. Utilisez Butterknife pour injecter des vues, Dagger pour le reste.

Si vous utilisez Dagger pour essayer d’injecter des vues, vous aurez un très bad time :) Essayez de penser à Butter Knife comme un moyen de lier des points de vue plutôt que l'injection. Je l’ai seulement appelé injection parce que tous les .__ Les convertis de RoboGuice se plaignaient du manque "d’injection de vue" avec une dague. Ce n'est pas vraiment l'injection du tout. Comme la réponse mentionne, c’est juste un moyen de réduire le passe-partout. Sous le capot, c'est Il suffit d'appeler findViewById comme vous le feriez!

3
serv-inc

La différence est assez simple: Un couteau à beurre est comme un poignard seulement infiniment moins tranchant.
Comme indiqué dans la documentation.

3
naXa

ButterKnife a été conçu pour simplifier l'enregistrement des écouteurs de clic et réduire le nombre de passifs fournis par les appels findViewById()

Dagger et Dagger2 sont des systèmes d’injection de dépendance à usage général. 

Ignorez le texte sur Guice et MVVM et lisez Dependency Injection et The Android Way. Cela répond assez bien à ce que Dagger est censé faire et simplifier. 

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

0
EpicPandaForce