Click here to load reader

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

  • View
    58

  • Download
    1

Embed Size (px)

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

  • INJEO DE DEPENDNCIAS NO MUNDO ANDROID

    CLRTON LEAL

  • QUEM SOU EU

    Clrton 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

  • TPICOS DE HOJE

    Histrico sobre Injeo de Dependncias no mundo Android e porque devemos usar o Dagger 2 para isso.

    Injeo de Dependncias como um padro de projetos e quais suas vantagens.

    Como aplicar Dagger 2 em seus projetos Android.

  • SENTA QUE L VEM HISTRIA

  • INJEO DE DEPENDNCIAS NO ANDROID

    RoboGuice

    Dagger

    Dagger 2

  • ROBOGUICE

  • UMA EXTENSO DO PROJETO GUICE, CRIADO PELO GOOGLE EM 2006 POR BOB LEE E JESSE WILSON.

  • LANADO EM 2010 E FOI UMA ENORME EVOLUO NA CRIAO DE APPS ANDROID.

  • PONTOS POSITIVOS

    Mdulos facilmente testveis

    Cdigos de fcil manuteno

    Nada de XMLs de configurao

    Muitas facilidades para o desenvolvimento Android

  • O GUICE 100% BASEADO EM REFLECTION. =/

  • PONTOS NEGATIVOS

    Problemas de injeo aconteciam apenas em Runtime.

    Logs de erros extremamente ruins.

    Debug difcil e com uma stack confusa.

    Muito lento para inicializao e injeo em geral.

  • TODOS OS PROBLEMAS DO GUICE OCORREM EM TEMPO DE EXECUO

  • UMA FORMA MAIS INTELIGENTE SERIA TRATAR AS INJEO EM TEMPO DE COMPILAO

  • DAGGER

  • EM 2011 A SQUARE CONTRATA BOB LEE E JESSE WILSON.

  • EM 2012 LANADO O DAGGER.

  • PONTOS POSITIVOS

    O Dagger tem como lema: Falhe o mais cedo possvel.

    Anlise de todas as dependncias e injees em tempo de compilao.

    Eliminado uso de Reflection na injeo de mtodos, campos e processamento de annotations.

    Escalabilidade. Pode ser usado sem problemas em grandes projetos.

    Deteco de dependncias cclicas em tempo de compilao.

  • AINDA USA REFLECTION PARA CARREGAR AS CLASSES GERADAS EM TEMPO DE COMPILAO

  • DAGGER 2

  • EM 2013 A GOOGLE PUBLICOU UMA ESPECIFICAO DE UMA VERSO MELHORADA DO DAGGER.

  • A COMUNIDADE DO DAGGER SE DIVIDIU ENTRE SQUARE E GOOGLE. ASSIM O PROJETO FOI FORKED.

  • EM 2014 O DAGGER 2 FOI LANADO COMO UM PROJETO DO GOOGLE PARA INJEO DE DEPENDNCIA DE ALTA PERFORMANCE.

  • DAGGER 2

    Proposto, desenvolvido e mantido pelo Google.

    Eliminou 100% do uso de reflection no projeto.

    Transferiu toda a analise de cdigo restante de Runtime para compilation time.

    Fcil de debugar e com uma stack de execuo limpa.

    Stack trace limpo e de fcil anlise.

  • NEGATIVOS

    DAGGER 2

    Menos flexvel que outros DI frameworks.

  • INJEO DE DEPENDNCIAS

  • PRIMEIRAMENTE TEMOS QUE ENTENDER QUE INJEO DE UMA PADRO DE PROJETOS E NO SOBRE FRAMEWORKS DA MODA.

  • TODO PROJETO TEM DEPENDNCIAS.

  • 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.
  • GRAFICO DE DEPENDNCIAS

    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.
  • public void doTweet() { OkClient okClient = new OkClient(); TwitterAuth twitterAuth = new TwitterAuth(okClient); TwitterApi twitterApi = new TwitterApi(okClient, twitterAuth); twitterApi.postTweet("Dagger amor.
  • TWITTER API HTTP CLIENT

    TWITTER AUTH

  • COMPLEXIDADE UM PROBLEMA.

  • MAS O QUE EU GANHO COM ESSA COMPLEXIDADE A MAIS NO MEU CDIGO?

  • 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 NO TRS INJEO DE DEPENDNCIAS PARA O SEU PROJETO.

  • DAGGER TRS A SIMPLIFICAO DO USO DE INJEO DE DEPENDNCIAS.

  • public void doTweet() { OkClient okClient = new OkClient(); TwitterAuth twitterAuth = new TwitterAuth(okClient); TwitterApi twitterApi = new TwitterApi(okClient, twitterAuth); twitterApi.postTweet("Dagger amor.
  • @InjectTwitterApi twitterApi; public void doTweet() { twitterApi.postTweet("Dagger amor.
  • TWITTER API HTTP CLIENT

    TWITTER AUTH

    MAIN APP

  • DAGGER 2 API

  • API

    @Module: Mecanismo para prover dependncias a serem injetadas.

    @Inject: Mecanismo que requer a injeo de uma dependncia.

    @Component: Elo entre os modules e os injetveis.

  • VAMOS AO CDIGO

  • OBRIGADO

  • PERGUNTAS?

    [email protected] @CLERTONLEAL HTTPS://GITHUB.COM/CLERTONLEAL/DAGGER-TALK

    mailto:[email protected]://github.com/clertonleal/dagger-talk