Validação de Views em Android

Neste post falarei um pouco sobre uma lib para Android que desenvolvi que tem como objetivo facilitar a vida do desenvolvedor quando se trata de validações de campos.

Problema

No desenvolvimento de software de modo geral, várias aplicações necessitam de validações nos campos a serem preenchidos pelos usuários. Normalmente é algo trabalhoso de fazer, pois temos que pensar em várias possibilidades de validações, comportamentos, como as validações devem ser exibidas aos usuários e dentre outras coisas.

E no desenvolvimento de aplicações para Android não é diferente!

Em um app Android onde existem várias Activities / Fragments que contém vários campos a serem preenchidos pelos usuários, e estes necessitam de validações, muitas vezes o desenvolvedor não consegue refatorar o código de tal modo que possa ser reutilizidado em outros pontos do app, podendo ser por falta de experiência ou até mesmo por prazos curtos / estourados. E isso acaba por gerar alguns efeitos colaterias na qualidade do código, como código sujo, repetições de código e dentre muitos outros efeitos colaterias que vemos no dia a dia do desenvolvimento de software.

Conceitos

No mundo Java existe um recurso bem interessantes e popular que são as Annotations. Outro recurso bastante poderoso mas pouco conhecido é a Annotation Processing API.

Annotations são nada mais do que metadados que podem ser utilizados para realizar determinada operação. Um exemplo bastante comum são as anotações do JPA para mapeamento das entidades.

Antes de mais nada, é preciso entender como o código Java é compilado para entender como funciona a Annotation Processing API.

Sabemos que o código Java é compilado para byte code, possibilitando que a JVM consiga interpretá-lo.

A Annotation Processing API atua em tempo de compilação e com ela podemos escrever processadores que nos permitem fazer váriás tarefas, como validar tipos de atributos, retorno de métodos, modificadores de acesso e também a geração de código.

Solução

Antes de falar sobre a lib, vale a pena listar algumas outras que utilizam Annotation Processing, como por exemplo o Dagger 2, ButterKnife, AutoValue, e dentre outros.

Don’t repeat yourself. Generate your code!

A lib está dividida em 4 módulos:

Módulos da lib

O módulo convalida-annotations define o conjunto de anotações que podem ser aplicadas nos campos de texto, sejam eles EditText ou TextInputLayout:

Anotações definidas

O módulo convalida-compiler é responsável por processar as anotações definidas e gerar os códigos de validação baseado nas anotações utilizadas nas views.

Neste módulo eu utilizei o JavaPoet que é uma API bem bacana e intuitiva para geração de código Java.

O módulo convalida tem por finalidade carregar as classes de validação geradas pelo processador através do ClassLoader, instanciá-las e então executar as validações ou limpar o estado das validações.

E o módulo sample é apenas uma aplicação de exemplo.

Abaixo segue um exemplo simples de como utilizar a lib:

Passo 1: Anote os campos de acordo com a validações que deseja aplicar

Passo 2: Inicialize as validações

Passo 3: Execute as validações geradas pelo processador

Passo 4: Caso queira limpar o estado das validações

E para utilizar a lib como uma dependência no seu projeto:

Adicione o repositório do jitpack ao seu projeto

Adicione as dependências

Conclusão

Apesar de o projeto ainda ser recente, creio tem um grande potencial e que pode vir a ser bastante útil para a comunidade por vários aspectos como a simplicidade, leveza e também pelo fato de minimizar os esforços aplicados quando se trata de validação de views em Android.

Qualquer feedback é bem-vindo!

Fica aqui o link do repositório para maiores informações: