O documento apresenta o framework RoboGuice para injeção de dependências em aplicativos Android. Discute como o RoboGuice permite escrever código Android de forma mais simples e desacoplada, evitando atividades grandes com muitas responsabilidades. Apresenta um exemplo de uso do RoboGuice para injetar dependências em uma atividade e reduzir seu acoplamento.
2. Diogo Souza
Entusiasta Java e
grande curioso do
Android (mesmo sem
um samsung galaxy...)
Systems Analyst at
Instituto Atlântico
@diogo_souza_c
http://diogosouza.com.b
r
http://conference.javace.org/
7. Mas afinal de contas, quem é
esse tal de RoboGuice?
http://conference.javace.org/
8. Partes rápidas
Framework de injeção de dependências
Código-aberto
Feito para o Android
Base no projeto Google Guice
http://conference.javace.org/
9. Revisando...
By Wikipédia:
“(Dependency Injection, em inglês) é um padrão de
desenvolvimento de programas de computadores
utilizado quando é necessário manter baixo o nível de
acoplamento entre diferentes módulos de um sistema.”
http://conference.javace.org/
10. Um pouco de história
O Cara
Michael Burton
Engenheiro de
Software
Líder no Groupon
Autor do RoboGuice
Acredite, não consegui nenhuma imagem
melhor...
http://conference.javace.org/
11. Um pouco de história
“Menos código significa menos
possibilidades de bugs”
“É quase impossível escrever uma app
Android que não se pareça com uma app
Android”
(Mike Burton)
http://conference.javace.org/
12. Entendendo este suco
Primeiro tínhamos (e ainda temos) as
fábricas estáticas
E agora, injeção!
http://conference.javace.org/
13. Entendendo este suco
E o que posso injetar com ele?
Views
Resources, extras, contentViews
POJOs (sim, ele usa o construtor default)
Contextos e atividades
http://conference.javace.org/
14. E como ele faz isso?
Context. That’s the secret!
http://conference.javace.org/
15. Configurando...
Baixe os jars (roboguice v.2.0 e guice v3.0)
Adicione ao projeto/classpath
Enjoy the play!!
http://conference.javace.org/
16. Configurando...
E pra quem curte o maven (quem não curte?):
<dependency>
<groupId>org.roboguice</groupId>
<artifactId>roboguice</artifactId>
<version>2.0</version>
</dependency>
http://conference.javace.org/
17. Show me the code (e um exemplo)
Ah sim, a Activity...
http://conference.javace.org/
18. Show me the code (e um exemplo)
HttpServlet JFrame Activity
http://conference.javace.org/
19. Show me the code (e um exemplo)
Não é raro encontrar:
Activities grandes
Com muitas responsabilidades
Chamando umas às outras, ou outros objetos até, e
enviando também suas próprias referências
Contando uma história...
http://conference.javace.org/
20. Show me the code
http://conference.javace.org/
21. Show me the code
http://conference.javace.org/
22. Coisas demais...
E pode ter mais, tudo dentro da mesma
Activity!!
Muita responsabilidade para a Activity!
(Não é legal!)
http://conference.javace.org/
23. Então o que fazer?
Dividir para conquistar!
Separamos as responsabilidades
http://conference.javace.org/
24. Uma classe a parte...
http://conference.javace.org/
25. E uma Activity mais simples
http://conference.javace.org/
26. Ok melhorou... Mas
ainda não estou
sentindo aquela
sensação de “saciedade
codificada mórbida”...
http://conference.javace.org/
27. É aí onde entra o RoboGuice
Sem mais delongas... Vamos ao código:
http://conference.javace.org/
28. E o novo CalculoIMCActivity
http://conference.javace.org/
29. Só pra não dizer que não mostrei a telinha...
http://conference.javace.org/
30. Legal, né?
RoboGuice é como uma factory methods
gratuita!
@Inject é o novo new
http://conference.javace.org/
31. O que mais posso fazer?
System Services
@Inject Vibrator vibrator
this.getSystemService(Context.VIBRATOR_SERVIC
E);
@Inject SharedPreferences preferencias
http://conference.javace.org/
32. O que mais posso fazer?
Ainda view’s
@Inject Random random
@InjectExtra Bundle extra
http://conference.javace.org/
33. Ainda tem mais?
Logs
Classe Ln (Log Natural)
É mais rápida
Recurso a varargs
Debug e verbose são os mais dispendiosos
http://conference.javace.org/
38. Tá brincando que tem mais?!
Se tem? Muito mais...
Onde encontrar?
Nas referências
No meu blog: http://diogosouza.com.br
Internet
http://conference.javace.org/