
Neste post eu farei uma breve introdução ao RoboGuice, uma das ferramentas disponíveis no Android para injeção de dependência. Com o simples exemplo apresentado a seguir será possível ter uma noção da grande utilidade e praticidade que o RoboGuice fornece aos projetos mobile. Quem já utiliza Spring ou algo similar no desenvolvimento Java, sabe como este modelo de programação é útil.
Bom, chega de papo e vamos ao exemplo:
Uma Activity Android normal, que representa uma tela de login, ficaria aproximadamente da seguinte forma. Com as declarações dos widgets e sua criação através do findViewById no método onCreate:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | public class MainActivity extends Activity { EditText username; EditText password; Button login; /** * Called when the activity is first created. * * @param savedInstanceState * If the activity is being re-initialized after previously being * shut down then this Bundle contains the data it most recently * supplied in onSaveInstanceState(Bundle). <b>Note: Otherwise it * is null.</b> */ @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); username = (EditText) findViewById(R.id.usr); password = (EditText) findViewById(R.id.pwd); login = (Button) findViewById(R.id.login); // Implementação do método... } |
Com RoboGuice, o código ficaria da seguinte forma:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | public class MainActivity extends RoboActivity { @InjectView(R.id.username) EditText username; @InjectView(R.id.password) EditText password; @InjectView(R.id.login) Button login; /* * (non-Javadoc) * * @see roboguice.activity.RoboActivity#onCreate(android.os.Bundle) */ @Override protected void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Implementação do método... } } |
Com um código extremamente mais ‘limpo’ e sem se preocupar com a criação de instancias de Views, Resources, Serviços, etc… Podemos trabalhar com mais facilidade e nos preocupar de fato apenas com a implementação do código e a lógica de negócios necessária na aplicação.
Mas, infelizmente, nem tudo são flores. Não sei se você percebeu, mas no segundo exemplo tivemos que extender nossa classe de RoboActivity, o que deixa nosso código extremamente acoplado e dependente de um framework externo. O RoboGuice provê diversas subclasses de Activity, já que, no Android, temos que utilizar diferentes tipos de Activity para diversos layouts de tela.
Outro ponto fraco do RoboGuice, é que a injeção de dependências é executada em tempo de execução, o que pode trazer um custo a mais à sua aplicação. Entretanto, fica a seu cargo decidir se o RoboGuice é uma boa opção ou não para a sua aplicação. De qualquer forma, vale o conhecimento!
Em breve divulgarei mais alguns posts sobre o RoboGuice, aguardem!
Este foi mais um post da série Android, espero que tenham gostado. Quaisquer dúvidas, sugestões e/ou reclamações, comentem!
_________________________________________
Lucas Oliveira – Analista Programador na DClick.
Bacharel em Sistemas de Informação pela Universidade de São Paulo.
@OliveiraLima_
4 comentários
A parte de ser executada no celular e que e algo que ainda me incomoda apesar de achar que o codigo fica MUITO mais limpo fico me questionando o quanto isso vale a pena e em que tipo de projeto isso pode ser realmente vantajoso. Atualmente tenho utilizado bastante o Android Annotation (http://androidannotations.org) que deixa o codigo tão ou mais limpo mas faz todo o processamento na hora da compilação utilizando Java Annotation Processing Tool (http://docs.oracle.com/javase/6/docs/technotes/guides/apt/index.html)
Oi Lucas, legal seus posts sobre Android, estou procurando me especializar no assunto, mas ainda não encontrei um roteiro legal de estudo. Acho que vou ter que fazer um curso mesmo. A D-Click presta esse serviço? Acho que o ideal seria online.
Você conhece os cursos de Android da Devmedia? O que você acha deles? Pode me ajudar? Obrigada.
Os links dos cursos que falei são esses:
http://www.devmedia.com.br/curso/introducao-ao-android-sdk/306
http://www.devmedia.com.br/curso/curso-de-android-sdk-dominando-a-api/329
Obrigada mais uma vez e me desculpe se usei o espaço errado para te perguntar isso, mas você me pareceu saber o que escreve e achei que poderia ajudar.
Olá Daniel!
Realmente, isto é um ponto bastante crítico do framework e devemos ter bastante cuidado ao utilizá-lo. A recomendação é que seja utilizado em projetos de grande porte, de forma que o custo será inferior ao benefício. Sobre o Android Annotations, este é um framework excepcional e eu pretendo falar dele também em breve
Inclusive já adianto que os dois (RoboGuice e AA) podem coexistir em um mesmo projeto, apesar das sobreposições.
Obrigado pelo comentário e pelas dicas!
Olá Patrícia!
Obrigado pelo comentário. A DClick não oferece nenhum curso de Android no momento, infelizmente. As opções que eu posso te indicar são:
O curso da Caelum, que é uma excelente escola: http://www.caelum.com.br/curso/fj-57-desenvolvimento-google-android/
O próprio site da Google oferece um roteiro de treinamento bastante interessante: http://developer.android.com/training/index.html (O único impeditivo talvez seja o fato de ser em inglês)
E se você tiver alguma sugestão de post pode pedir ou pelo meu twitter ou aqui mesmo pelos comentários que eu tentarei te ajudar.
Deixe Seu Comentário