dagger 2 injeção de dependências no mundo android
TRANSCRIPT
![Page 1: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/1.jpg)
INJEÇÃO DE DEPENDÊNCIAS NO MUNDO ANDROID
CLÊRTON LEAL
![Page 2: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/2.jpg)
QUEM SOU EU
▸ Clêrton Leal
▸ Nascido e criado na cidade de Fortaleza
▸ Trabalhando como consultor para a Avenue Code de Belo Horizonte
▸ Morando em BH a pouco mais de 5 meses =)
![Page 3: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/3.jpg)
DAGGER 2
![Page 4: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/4.jpg)
TÓPICOS DE HOJE
▸ Histórico sobre Injeção de Dependências no mundo Android e porque devemos usar o Dagger 2 para isso.
▸ Injeção de Dependências como um padrão de projetos e quais suas vantagens.
▸ Como aplicar Dagger 2 em seus projetos Android.
![Page 5: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/5.jpg)
SENTA QUE LÁ VEM HISTÓRIA
![Page 6: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/6.jpg)
INJEÇÃO DE DEPENDÊNCIAS NO ANDROID
▸ RoboGuice
▸ Dagger
▸ Dagger 2
![Page 7: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/7.jpg)
ROBOGUICE
![Page 8: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/8.jpg)
É UMA EXTENSÃO DO PROJETO GUICE, CRIADO PELO GOOGLE EM 2006 POR BOB LEE E JESSE WILSON.
![Page 9: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/9.jpg)
LANÇADO EM 2010 E FOI UMA ENORME EVOLUÇÃO NA CRIAÇÃO DE APPS ANDROID.
![Page 10: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/10.jpg)
PONTOS POSITIVOS
▸ Módulos facilmente testáveis
▸ Códigos de fácil manutenção
▸ Nada de XMLs de configuração
▸ Muitas facilidades para o desenvolvimento Android
![Page 11: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/11.jpg)
O GUICE É 100% BASEADO EM REFLECTION. =/
![Page 12: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/12.jpg)
PONTOS NEGATIVOS
▸ Problemas de injeção aconteciam apenas em Runtime.
▸ Logs de erros extremamente ruins.
▸ Debug difícil e com uma stack confusa.
▸ Muito lento para inicialização e injeção em geral.
![Page 13: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/13.jpg)
TODOS OS PROBLEMAS DO GUICE OCORREM EM TEMPO DE EXECUÇÃO
![Page 14: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/14.jpg)
UMA FORMA MAIS INTELIGENTE SERIA TRATAR AS INJEÇÃO EM TEMPO DE COMPILAÇÃO
![Page 15: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/15.jpg)
DAGGER
![Page 16: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/16.jpg)
EM 2011 A SQUARE CONTRATA BOB LEE E JESSE WILSON.
![Page 17: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/17.jpg)
EM 2012 É LANÇADO O DAGGER.
![Page 18: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/18.jpg)
PONTOS POSITIVOS
▸ O Dagger tem como lema: “Falhe o mais cedo possível”.
▸ Análise de todas as dependências e injeções em tempo de compilação.
▸ Eliminado uso de Reflection na injeção de métodos, campos e processamento de annotations.
▸ Escalabilidade. Pode ser usado sem problemas em grandes projetos.
▸ Detecção de dependências cíclicas em tempo de compilação.
![Page 19: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/19.jpg)
AINDA USA REFLECTION PARA CARREGAR AS CLASSES GERADAS EM TEMPO DE COMPILAÇÃO
![Page 20: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/20.jpg)
DAGGER 2
![Page 21: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/21.jpg)
EM 2013 A GOOGLE PUBLICOU UMA ESPECIFICAÇÃO DE UMA VERSÃO MELHORADA DO DAGGER.
![Page 22: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/22.jpg)
A COMUNIDADE DO DAGGER SE DIVIDIU ENTRE SQUARE E GOOGLE. ASSIM O PROJETO FOI FORKED.
![Page 23: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/23.jpg)
EM 2014 O DAGGER 2 FOI LANÇADO COMO UM PROJETO DO GOOGLE PARA INJEÇÃO DE DEPENDÊNCIA DE ALTA PERFORMANCE.
![Page 24: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/24.jpg)
DAGGER 2
▸ Proposto, desenvolvido e mantido pelo Google.
▸ Eliminou 100% do uso de reflection no projeto.
▸ Transferiu toda a analise de código restante de Runtime para compilation time.
▸ Fácil de debugar e com uma stack de execução limpa.
▸ Stack trace limpo e de fácil análise.
![Page 25: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/25.jpg)
NEGATIVOS
DAGGER 2
▸ Menos flexível que outros DI frameworks.
![Page 26: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/26.jpg)
INJEÇÃO DE DEPENDÊNCIAS
![Page 27: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/27.jpg)
PRIMEIRAMENTE TEMOS QUE ENTENDER QUE INJEÇÃO DE É UMA PADRÃO DE PROJETOS E NÃO É SOBRE FRAMEWORKS DA MODA.
![Page 28: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/28.jpg)
TODO PROJETO TEM DEPENDÊNCIAS.
![Page 29: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/29.jpg)
public class TwitterApi { private final OkClient okClient; private final TwitterAuth twitterAuth; public TwitterApi() { this.okClient = new OkClient(); this.twitterAuth = new TwitterAuth(okClient); } public void postTweet(String tweet) { /*Posting tweet*/ } }
![Page 30: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/30.jpg)
public void doTweet() { TwitterApi twitterApi = new TwitterApi(); twitterApi.postTweet("Dagger é amor. <3"); }
![Page 31: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/31.jpg)
GRAFICO DE DEPENDÊNCIAS
Twitter API
Twitter Auth
OkClient
![Page 32: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/32.jpg)
public class TwitterApi { private final OkClient okClient; private final TwitterAuth twitterAuth; public TwitterApi() { this.okClient = new OkClient(); this.twitterAuth = new TwitterAuth(okClient); } public void postTweet(String tweet) { /*Posting tweet*/ } }
![Page 33: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/33.jpg)
public class TwitterApi { private final OkClient okClient; private final TwitterAuth twitterAuth; public TwitterApi(OkClient okClient, TwitterAuth twitterAuth) { this.okClient = okClient; this.twitterAuth = twitterAuth; } public void postTweet(String tweet) { /*Posting tweet*/ } }
![Page 34: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/34.jpg)
public void doTweet() { TwitterApi twitterApi = new TwitterApi(); twitterApi.postTweet("Dagger é amor. <3"); }
![Page 35: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/35.jpg)
public void doTweet() { OkClient okClient = new OkClient(); TwitterAuth twitterAuth = new TwitterAuth(okClient); TwitterApi twitterApi = new TwitterApi(okClient, twitterAuth); twitterApi.postTweet("Dagger é amor. <3"); }
![Page 36: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/36.jpg)
TWITTER API HTTP CLIENT
TWITTER AUTH
![Page 37: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/37.jpg)
COMPLEXIDADE É UM PROBLEMA.
![Page 38: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/38.jpg)
MAS O QUE EU GANHO COM ESSA COMPLEXIDADE A MAIS NO MEU CÓDIGO?
![Page 39: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/39.jpg)
TESTABILIDADE!!!
![Page 40: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/40.jpg)
public class TwitterApi { private final OkClient okClient; private final TwitterAuth twitterAuth; public TwitterApi() { this.okClient = new OkClient(); this.twitterAuth = new TwitterAuth(okClient); } public void postTweet(String tweet) { /*Posting tweet*/ } }
![Page 41: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/41.jpg)
public class TwitterApi { private final OkClient okClient; private final TwitterAuth twitterAuth; public TwitterApi(OkClient okClient, TwitterAuth twitterAuth) { this.okClient = okClient; this.twitterAuth = twitterAuth; } public void postTweet(String tweet) { /*Posting tweet*/ } }
![Page 42: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/42.jpg)
DAGGER NÃO TRÁS INJEÇÃO DE DEPENDÊNCIAS PARA O SEU PROJETO.
![Page 43: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/43.jpg)
DAGGER TRÁS A SIMPLIFICAÇÃO DO USO DE INJEÇÃO DE DEPENDÊNCIAS.
![Page 44: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/44.jpg)
public void doTweet() { OkClient okClient = new OkClient(); TwitterAuth twitterAuth = new TwitterAuth(okClient); TwitterApi twitterApi = new TwitterApi(okClient, twitterAuth); twitterApi.postTweet("Dagger é amor. <3"); }
![Page 45: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/45.jpg)
@InjectTwitterApi twitterApi; public void doTweet() { twitterApi.postTweet("Dagger é amor. <3"); }
![Page 46: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/46.jpg)
TWITTER API HTTP CLIENT
TWITTER AUTH
MAIN APP
![Page 47: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/47.jpg)
DAGGER 2 API
![Page 48: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/48.jpg)
API
▸ @Module: Mecanismo para prover dependências a serem injetadas.
▸ @Inject: Mecanismo que requer a injeção de uma dependência.
▸ @Component: Elo entre os modules e os injetáveis.
![Page 49: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/49.jpg)
VAMOS AO CÓDIGO
![Page 50: Dagger 2 Injeção de dependências no mundo Android](https://reader037.vdocuments.site/reader037/viewer/2022100306/58814d901a28abb0508b535d/html5/thumbnails/50.jpg)
OBRIGADO