Click here to load reader
View
58
Download
1
Embed Size (px)
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*/ } }
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*/ } }
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.
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