Mobile

Android – Injeção de dependência com RoboGuice

 

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:
 
[cc lang=”java” width=”100%”]
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). Note: Otherwise it
* is null.

*/
@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…

}

[/cc]

 

Com RoboGuice, o código ficaria da seguinte forma:
 
[cc lang=”java” width=”100%”]
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…

}

}
[/cc]

 

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 redspark.
Bacharel em Sistemas de Informação pela Universidade de São Paulo.
@OliveiraLima_

 

4 Comments

  • 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)

    • Lucas Oliveira disse:

      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!

  • Patricia Lopes disse:

    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.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Compartilhe isso: