Différence entre Dagger 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 vues et que Dagger est une bibliothèque d’dependency injections. Mais la documentation en ligne me semble un peu exagérée. Selon la documentation de Butterknife, vous pouvez également faire des injections sans activité, ce que fait le poignard? Ou ai-je mal compris quelque chose?

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

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

ButterKnife est ciblé pour injecter des vues uniquement. L’injection sans activité signifie simplement que vous pouvez fournir votre propre vue racine pour injecter des vues (comme avec des vues gonflées manuellement, etc.). Dagger est un peu plus compliqué. Il peut injecter tout ce que vous voulez tant que vous avez spécifié Module – class qui satisfait ces dépendances (vous pouvez également utiliser l’injection constructeur).

Comme sharepoint départ, je dirais que ButterKnife vous aide à éviter tout ce code passe-partout pour créer des vues (aka (TextView)findViewById(R.id.some_text_view); rien de plus. ce n’est pas vraiment une injection ..

Il convient également de mentionner que Jake Wharton est l’un des développeurs de ces deux cool cool 🙂

Voici quelques liens utiles:

Dagger exemple de projet sur GitHub

Présentation de poignard sur Devoxx (Jake Wharton)

Dagger hangout avec Dagger devs

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

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. Remplacez simplement “this” par “context” ou “getContext” pour déterminer la scope.

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

Je combine Butter Knife, parcelable et easyAdapter pour les vues de liste dans mon projet. La raison est moins bruyante et avec un colis 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

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

@ JakeWharton répond partiellement dans le commentaire:

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

Si vous utilisez Dagger pour essayer d’injecter des vues, vous allez avoir un très mauvais moment 🙂 Essayez de penser à Butter Knife comme un moyen de relier les vues plutôt que d’injecter. Je l’ai seulement appelé injection parce que tous les convertis de RoboGuice se plaignaient de l’absence d’injection de vue avec Dagger. Ce n’est pas vraiment une injection du tout. Comme les mentions de réponse, c’est juste un moyen de réduire le passe-partout. Sous le capot, il suffit d’appeler findViewById comme vous le feriez!

ButterKnife a été conçu pour simplifier l’enregistrement des écouteurs de clics et pour réduire le nombre de findViewById() fourni par les findViewById() à findViewById() .

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

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

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