2015-07-11 11 views
20

Quali sono i vantaggi di Dagger 2 su Dagger 1?Iniezione dipendenza Java: Dagger 1 vs Dagger 2, che è meglio?

Finora ho trovato (solo) 2:

  • Dagger 2 consente di utilizzare il codice offuscamento con Proguard
  • Dagger 2 è più veloce (che non è molto di un vantaggio quando lo si utilizza per l'applicazione Android ma è sicuro che una cosa importante se lo si utilizza per una sorta di assistente)

Nello stesso tempo ho trovato un grosso svantaggio: non si può avere le sostituzioni del modulo (@Module(overrides = true)) in Dagger 2, che è in gran parte fastidioso almeno per me - era molto te utile per il test dell'unità.

Ci sono altri vantaggi/svantaggi?

+1

* Non chiedere informazioni su: raccomandazioni o confronti di prodotti o servizi * – Selvin

+0

Hai posto una domanda similare qui: http://stackoverflow.com/questions/31354735/how-to-migrate-missing-inject-from-module -con-completa-falso-da-pugnale-1-a. Penso che questo post dovrebbe essere una modifica a quello, –

+4

@ Silvin Domande come questa sono a volte di grande valore per la comunità perché richiamano l'attenzione su un problema comune come "Quale Dagger DI scegliere e perché?". Mi dispiace per aver violato la regola che hai citato ma c'è anche "Alcune domande soggettive sono permesse", "Tutte le domande soggettive dovrebbero essere costruttive". Se il tuo commento riceve più voti rispetto a quello corrente, eliminerò la domanda. – Ognyan

risposta

15

Alcuni vantaggi e svantaggi presi da https://blog.gouline.net/2015/05/04/dagger-2-even-sharper-less-square/ e http://google.github.io/dagger/dagger-1-migration.html:

Vantaggi di Dagger 2:

  • Non più di riflessione - tutto è fatto come le chiamate in calcestruzzo (ProGuard funziona senza alcuna configurazione a tutti)
  • Niente più composizione del grafico di runtime - migliora le prestazioni, compresi i casi per richiesta
  • Tracciabile - codice generato in modo migliore e nessuna riflessione aiutano a rendere il codice r eadable e facile da seguire
  • appoggia metodo di iniezione in aggiunta al campo e iniezione costruttore che erano i soli due tipi supportati da Delitto 1
  • moduli richiedono meno configurazione di Dagger 1
  • consente di utilizzare qualsiasi ambito ben formata annotazione. Dagger 1 supportava un solo ambito: @Singleton.

e svantaggi:

  • Procedimento inject() ora ha un'associazione tipo forte con la porta di iniezione. Ciò è utile per il debugging, ma complica una pratica comune di iniezione da classi di base (ad es. Attività di base, frammenti ecc.).
  • L'implementazione del componente richiede la ricostruzione del progetto in modo che venga visualizzata e qualsiasi errore di compilazione correlato all'iniezione determina la scomparsa della classe (ovvero non viene generata).
  • Non supporta overrides. I moduli che eseguono l'override per i falsi test semplici possono creare una sottoclasse del modulo per emulare tale comportamento. I moduli che utilizzano l'override e si basano sull'iniezione di dipendenza devono essere decomposti in modo che i moduli sovrascritti siano invece rappresentati come una scelta tra due moduli.

EDIT 2016/11/16: Questo non è un vantaggio tecnico, ma Dagger 1 ora è deprecato (dal 15 settembre, 2016) e non sarà più attivamente sviluppato. Raccomandano di migrare a Dagger 2.

+0

Non riesco più a trovare la fonte delle informazioni, ma D2 dovrebbe essere il 17% più veloce di D1 .. – Snicolas

+0

@Ognyan risponde alla tua domanda? per favore considera di accettarlo se è così! Grazie! – snafu109

2

Non consiglierei di dare un'occhiata a toothpick.

Come co-autore, sono ovviamente troppo prevenuto, ma sì questo è molto più semplice da usare, almeno altrettanto velocemente nella maggior parte dei casi rispetto ai pugnali. E in realtà l'albero dello scope è un modo molto potente per sviluppare funzionalità più avanzate come le istanze di riciclaggio in ambiti che si estendono su più attività.

+0

Non lo faresti? Beh, raccomanderei lo stuzzicadenti - Ho usato Dagger 2 molto di più, ma questa libreria non mi ha ancora causato problemi. – npace

Problemi correlati