Por que eu devo ler este artigo:Este artigo mostra como o desenvolvedor pode utilizar a injeção de dependência em suas aplicações Android fazendo uso de duas bibliotecas conhecidas do mercado: a RoboGuice e a Butter Knife. Injeção de dependência é um padrão de projeto que visa diminuir o acoplamento entre classes deixando o código mais limpo e legível. Para fixar os conceitos, é desenvolvida uma aplicação de login. A discussão desse tema é útil para todo desenvolvedor Android que esteja procurando uma melhora no seu código, seguindo as boas práticas de programação e uso extensivo de Design Patterns. Como resultado, sua aplicação terá um código mais enxuto, coeso e de fácil entendimento.

Existem diversos indicadores que podem ser utilizados para mostrar o poder e o status da computação móvel no mundo atualmente. Poderíamos citar o número de aplicativos nas app stores, talvez o grande número de vagas de emprego e a média salarial oferecida. Talvez, falar também sobre o número de vendas de smartphones e sua taxa de crescimento constante e vertiginosa.

Porém, existe um outro grande indicativo que as vezes não é tratado. Nos últimos anos, cada vez mais, percebemos a adaptação de bibliotecas e frameworks de plataformas maiores e mais tradicionais para o mobile. Por exemplo, API´s do Java EE que migram ou têm uma cópia para o mundo móvel.

Além disso, também é comum vermos a adoção de novos design patterns no desenvolvimento Android, iOS ou Windows Phone. Isso só prova a relevância que estas plataformas possuem, muito diferente dos anos 2004 e 2005, quando o Java ME começava a ganhar destaque.

Até mesmo os sistemas operacionais trabalham de forma diferente com aplicativos de terceiros. No Java ME, que trabalhava na maioria das vezes para um sistema operacional chamado Symbian, seus aplicativos eram vistos de forma totalmente diferente e preconceituosa em relação aos aplicativos nativos. Prova disso era o conceito de sandbox que permeava o desenvolvimento Java ME.

Hoje em dia os sistemas tratam de forma igual todos os aplicativos, seja ele feito por você, Google, Oracle ou Apple. O Android, por exemplo, permite até que você entregue ao usuário uma alternativa aos aplicativos nativos, como telefone, agenda, calendário, galeria de fotos, dentre outros.

Somado a este fato, existem alguns frameworks e/ou design patterns que vêm de encontro a uma dificuldade latente de uma plataforma. Por exemplo, na plataforma Android, existe o já conhecido método findViewById, que procura em um recurso visual de uma Activity uma View em específico, buscando pelo id fornecido como parâmetro para este método.

Para desenvolvedores iniciantes na plataforma, o uso deste método para recuperar e trabalhar com recursos visuais no código Java soa estranho. Além disso, dependendo do tamanho da interface, pode existir uma quantidade considerável de linhas somente para este objetivo. Para aqueles que buscam um código limpo, com certeza esta não seria a melhor solução.

Neste contexto, temos a possibilidade de trabalhar com bibliotecas para injeção de dependência no Android. A premissa da injeção de dependência é fazer com que atributos locais e globais não precisem ser instanciados diretamente no código. Um uso comum na injeção é a Annotation. Sendo assim, basta inserir uma anotação específica de algum framework (como o Butter Knife que veremos neste artigo) para que o mesmo entenda a necessidade de acoplar o referido objeto na classe adjacente.

Existem duas possibilidades que estão sendo mais utilizadas no mercado: RoboGuice e Butter Knife. Ambas, além de evitar este problema do uso do findViewById, foram criadas para uso de injeção de dependência na plataforma. Sendo assim, trazem outros benefícios como diminuição do acoplamento entre as classes. O acoplamento entre as classes se refere à quantidade de relacionamentos que uma determinada classe possui com outras. Quanto maior for esse número, maior será seu acoplamento. O ideal é manter este número baixo uma vez que altos níveis de acoplamento tendem a aumentar a complexidade da evolução da classe afetada pelo problema.

Outro problema que estas ferramentas resolvem é o uso extensivo da classe Context em qualquer aplicação Android. A classe Context pode ser vista basicamente como um coringa na plataforma. Ela é utilizada para disparar Activities, Services, Broadcast Receivers, Intents, recuperar recursos como strings, cores, animações, shapes, dentre outros. Porém, algumas vezes, o código é construído de uma forma que instâncias da referida classe são passadas para outros construtores, criando um emaranhado de código confuso e de difícil manutenção.

O objetivo deste artigo é construir uma aplicação com funções comuns à grande maioria dos aplicativos Android. Porém, mostrando a forma comum e com uso das duas bibliotecas. Com isso, o leitor enxergará de forma clara os benefícios obtidos com o uso do RoboGuice e Butter Knife.

Aplicação utilizada

A aplicação proposta é apenas uma tela de login. Ao clicar em um botão de login, o usuário é direcionado para a tela de boas-vindas caso as credenciais estejam corretas ...

Quer ler esse conteúdo completo? Tenha acesso completo