SlideShare uma empresa Scribd logo
1 de 51
Baixar para ler offline
INJEÇÃO DE DEPENDÊNCIAS NO MUNDO
ANDROID
CLÊRTON LEAL
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 =)
DAGGER 2
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.
SENTA QUE LÁ VEM
HISTÓRIA
INJEÇÃO DE DEPENDÊNCIAS NO ANDROID
▸ RoboGuice
▸ Dagger
▸ Dagger 2
ROBOGUICE
É UMA EXTENSÃO DO PROJETO
GUICE, CRIADO PELO GOOGLE EM
2006 POR BOB LEE E JESSE WILSON.
LANÇADO EM 2010 E FOI UMA
ENORME EVOLUÇÃO NA CRIAÇÃO DE
APPS ANDROID.
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
O GUICE É 100% BASEADO
EM REFLECTION. =/
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.
TODOS OS PROBLEMAS DO GUICE
OCORREM EM TEMPO DE EXECUÇÃO
UMA FORMA MAIS INTELIGENTE
SERIA TRATAR AS INJEÇÃO EM
TEMPO DE COMPILAÇÃO
DAGGER
EM 2011 A SQUARE CONTRATA
BOB LEE E JESSE WILSON.
EM 2012 É LANÇADO O
DAGGER.
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.
AINDA USA REFLECTION PARA
CARREGAR AS CLASSES GERADAS
EM TEMPO DE COMPILAÇÃO
DAGGER 2
EM 2013 A GOOGLE PUBLICOU UMA
ESPECIFICAÇÃO DE UMA VERSÃO
MELHORADA DO DAGGER.
A COMUNIDADE DO DAGGER SE
DIVIDIU ENTRE SQUARE E GOOGLE.
ASSIM O PROJETO FOI FORKED.
EM 2014 O DAGGER 2 FOI LANÇADO COMO
UM PROJETO DO GOOGLE PARA INJEÇÃO
DE DEPENDÊNCIA DE ALTA PERFORMANCE.
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.
NEGATIVOS
DAGGER 2
▸ Menos flexível que outros DI frameworks.
INJEÇÃO DE
DEPENDÊNCIAS
PRIMEIRAMENTE TEMOS QUE ENTENDER QUE
INJEÇÃO DE É UMA PADRÃO DE PROJETOS E
NÃO É SOBRE FRAMEWORKS DA MODA.
TODO PROJETO TEM
DEPENDÊNCIAS.
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*/

}

}
public void doTweet() {

TwitterApi twitterApi = new TwitterApi();

twitterApi.postTweet("Dagger é amor. <3");

}
GRAFICO DE DEPENDÊNCIAS
Twitter API
Twitter Auth
OkClient
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*/

}

}
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*/

}

}
public void doTweet() {

TwitterApi twitterApi = new TwitterApi();

twitterApi.postTweet("Dagger é amor. <3");

}
public void doTweet() {

OkClient okClient = new OkClient();

TwitterAuth twitterAuth = new TwitterAuth(okClient);

TwitterApi twitterApi = new TwitterApi(okClient, twitterAuth);

twitterApi.postTweet("Dagger é amor. <3");

}
TWITTER API HTTP CLIENT
TWITTER AUTH
COMPLEXIDADE É UM
PROBLEMA.
MAS O QUE EU GANHO COM ESSA
COMPLEXIDADE A MAIS NO MEU
CÓDIGO?
TESTABILIDADE!!!
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*/

}

}
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*/

}

}
DAGGER NÃO TRÁS INJEÇÃO DE
DEPENDÊNCIAS PARA O SEU
PROJETO.
DAGGER TRÁS A SIMPLIFICAÇÃO DO
USO DE INJEÇÃO DE
DEPENDÊNCIAS.
public void doTweet() {

OkClient okClient = new OkClient();

TwitterAuth twitterAuth = new TwitterAuth(okClient);

TwitterApi twitterApi = new TwitterApi(okClient, twitterAuth);

twitterApi.postTweet("Dagger é amor. <3");

}
@Inject

TwitterApi twitterApi;



public void doTweet() {

twitterApi.postTweet("Dagger é amor. <3");

}
TWITTER API HTTP CLIENT
TWITTER AUTH
MAIN APP
DAGGER 2 API
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.
VAMOS AO CÓDIGO
OBRIGADO
PERGUNTAS?
‣ CLERTONLEAL@GMAIL.COM
‣ @CLERTONLEAL
‣ HTTPS://GITHUB.COM/CLERTONLEAL/DAGGER-TALK

Mais conteúdo relacionado

Semelhante a Dagger 2 Injeção de dependências no mundo Android

Reduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokReduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokWellington Pinheiro
 
Arquitetura e Design QCon2010 - Paulo Silveira - Caelum
Arquitetura e Design QCon2010 - Paulo Silveira - CaelumArquitetura e Design QCon2010 - Paulo Silveira - Caelum
Arquitetura e Design QCon2010 - Paulo Silveira - CaelumCaelum
 
Workshop sistema de versionamento de código - git
Workshop  sistema de versionamento de código - gitWorkshop  sistema de versionamento de código - git
Workshop sistema de versionamento de código - gitThiago Filadelfo
 
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonMinicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonRicardo Longa
 
better faster stronger dagger
better faster stronger daggerbetter faster stronger dagger
better faster stronger daggertdc-globalcode
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 
Android: Conheça o Futuro Inevitável
Android: Conheça o Futuro InevitávelAndroid: Conheça o Futuro Inevitável
Android: Conheça o Futuro InevitávelCampus Party Brasil
 
Introdução à programação em Android SENAC 17.06.2013
Introdução à programação em Android SENAC 17.06.2013Introdução à programação em Android SENAC 17.06.2013
Introdução à programação em Android SENAC 17.06.2013guisester
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Danilo Pinotti
 
Android DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidAndroid DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidiMasters
 
Docker para Desenvolvedores .NET - .NET SP - Abril-2018
Docker para Desenvolvedores .NET - .NET SP - Abril-2018Docker para Desenvolvedores .NET - .NET SP - Abril-2018
Docker para Desenvolvedores .NET - .NET SP - Abril-2018Renato Groff
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressTiago Hillebrandt
 
Aplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerAplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerWellington Silva
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_onRoberson Alves
 

Semelhante a Dagger 2 Injeção de dependências no mundo Android (20)

Reduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com LombokReduzindo o boilerplate code com Lombok
Reduzindo o boilerplate code com Lombok
 
Arquitetura e Design QCon2010 - Paulo Silveira - Caelum
Arquitetura e Design QCon2010 - Paulo Silveira - CaelumArquitetura e Design QCon2010 - Paulo Silveira - Caelum
Arquitetura e Design QCon2010 - Paulo Silveira - Caelum
 
GDG Angular 2
GDG Angular 2GDG Angular 2
GDG Angular 2
 
Workshop sistema de versionamento de código - git
Workshop  sistema de versionamento de código - gitWorkshop  sistema de versionamento de código - git
Workshop sistema de versionamento de código - git
 
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e CroutonMinicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
Minicurso sobre AndroidAnnotations, GreenDAO, EventBus e Crouton
 
better faster stronger dagger
better faster stronger daggerbetter faster stronger dagger
better faster stronger dagger
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
Android: Conheça o Futuro Inevitável
Android: Conheça o Futuro InevitávelAndroid: Conheça o Futuro Inevitável
Android: Conheça o Futuro Inevitável
 
Introdução à programação em Android SENAC 17.06.2013
Introdução à programação em Android SENAC 17.06.2013Introdução à programação em Android SENAC 17.06.2013
Introdução à programação em Android SENAC 17.06.2013
 
Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)Minicurso GIT Completo (2022)
Minicurso GIT Completo (2022)
 
ATDD Android
ATDD AndroidATDD Android
ATDD Android
 
Android DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos AndroidAndroid DevConference - Dagger 2: uso avançado em projetos Android
Android DevConference - Dagger 2: uso avançado em projetos Android
 
Secomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao ElixirSecomp 2018 - DO Ruby ao Elixir
Secomp 2018 - DO Ruby ao Elixir
 
Docker para Desenvolvedores .NET - .NET SP - Abril-2018
Docker para Desenvolvedores .NET - .NET SP - Abril-2018Docker para Desenvolvedores .NET - .NET SP - Abril-2018
Docker para Desenvolvedores .NET - .NET SP - Abril-2018
 
Phonegap
PhonegapPhonegap
Phonegap
 
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPressFerramentas Essenciais para Desenvolvedores de Plugins WordPress
Ferramentas Essenciais para Desenvolvedores de Plugins WordPress
 
Gwt-Guice_TDC2009
Gwt-Guice_TDC2009Gwt-Guice_TDC2009
Gwt-Guice_TDC2009
 
Aplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com DockerAplicações 12 fatores, melhor com Docker
Aplicações 12 fatores, melhor com Docker
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_on
 
TDD em 220V
TDD em 220VTDD em 220V
TDD em 220V
 

Dagger 2 Injeção de dependências no mundo Android

  • 1. INJEÇÃO DE DEPENDÊNCIAS NO MUNDO ANDROID CLÊRTON LEAL
  • 2. 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 =)
  • 4. 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.
  • 5. SENTA QUE LÁ VEM HISTÓRIA
  • 6. INJEÇÃO DE DEPENDÊNCIAS NO ANDROID ▸ RoboGuice ▸ Dagger ▸ Dagger 2
  • 8. É UMA EXTENSÃO DO PROJETO GUICE, CRIADO PELO GOOGLE EM 2006 POR BOB LEE E JESSE WILSON.
  • 9. LANÇADO EM 2010 E FOI UMA ENORME EVOLUÇÃO NA CRIAÇÃO DE APPS ANDROID.
  • 10. 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
  • 11. O GUICE É 100% BASEADO EM REFLECTION. =/
  • 12. 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.
  • 13. TODOS OS PROBLEMAS DO GUICE OCORREM EM TEMPO DE EXECUÇÃO
  • 14. UMA FORMA MAIS INTELIGENTE SERIA TRATAR AS INJEÇÃO EM TEMPO DE COMPILAÇÃO
  • 16. EM 2011 A SQUARE CONTRATA BOB LEE E JESSE WILSON.
  • 17. EM 2012 É LANÇADO O DAGGER.
  • 18. 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.
  • 19. AINDA USA REFLECTION PARA CARREGAR AS CLASSES GERADAS EM TEMPO DE COMPILAÇÃO
  • 21. EM 2013 A GOOGLE PUBLICOU UMA ESPECIFICAÇÃO DE UMA VERSÃO MELHORADA DO DAGGER.
  • 22. A COMUNIDADE DO DAGGER SE DIVIDIU ENTRE SQUARE E GOOGLE. ASSIM O PROJETO FOI FORKED.
  • 23. EM 2014 O DAGGER 2 FOI LANÇADO COMO UM PROJETO DO GOOGLE PARA INJEÇÃO DE DEPENDÊNCIA DE ALTA PERFORMANCE.
  • 24. 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.
  • 25. NEGATIVOS DAGGER 2 ▸ Menos flexível que outros DI frameworks.
  • 27. PRIMEIRAMENTE TEMOS QUE ENTENDER QUE INJEÇÃO DE É UMA PADRÃO DE PROJETOS E NÃO É SOBRE FRAMEWORKS DA MODA.
  • 29. 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*/
 }
 }
  • 30. public void doTweet() {
 TwitterApi twitterApi = new TwitterApi();
 twitterApi.postTweet("Dagger é amor. <3");
 }
  • 31. GRAFICO DE DEPENDÊNCIAS Twitter API Twitter Auth OkClient
  • 32. 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*/
 }
 }
  • 33. 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*/
 }
 }
  • 34. public void doTweet() {
 TwitterApi twitterApi = new TwitterApi();
 twitterApi.postTweet("Dagger é amor. <3");
 }
  • 35. public void doTweet() {
 OkClient okClient = new OkClient();
 TwitterAuth twitterAuth = new TwitterAuth(okClient);
 TwitterApi twitterApi = new TwitterApi(okClient, twitterAuth);
 twitterApi.postTweet("Dagger é amor. <3");
 }
  • 36. TWITTER API HTTP CLIENT TWITTER AUTH
  • 38. MAS O QUE EU GANHO COM ESSA COMPLEXIDADE A MAIS NO MEU CÓDIGO?
  • 40. 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*/
 }
 }
  • 41. 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*/
 }
 }
  • 42. DAGGER NÃO TRÁS INJEÇÃO DE DEPENDÊNCIAS PARA O SEU PROJETO.
  • 43. DAGGER TRÁS A SIMPLIFICAÇÃO DO USO DE INJEÇÃO DE DEPENDÊNCIAS.
  • 44. public void doTweet() {
 OkClient okClient = new OkClient();
 TwitterAuth twitterAuth = new TwitterAuth(okClient);
 TwitterApi twitterApi = new TwitterApi(okClient, twitterAuth);
 twitterApi.postTweet("Dagger é amor. <3");
 }
  • 45. @Inject
 TwitterApi twitterApi;
 
 public void doTweet() {
 twitterApi.postTweet("Dagger é amor. <3");
 }
  • 46. TWITTER API HTTP CLIENT TWITTER AUTH MAIN APP
  • 48. 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.
  • 51. PERGUNTAS? ‣ CLERTONLEAL@GMAIL.COM ‣ @CLERTONLEAL ‣ HTTPS://GITHUB.COM/CLERTONLEAL/DAGGER-TALK