Motivação
Todo software, seja ele escrito em Java ou qualquer outra linguagem de programação, é uma engrenagem construída para resolver um conjunto de problemas. Em linhas gerais, o fluxo se resume em:
- Operações são oferecidas ao cliente;
- Operações podem demandar parâmetros para nortear sua execução;
- Operações são executadas a partir dos parâmetros fornecidos;
- O resultado do processamento é retornado ao cliente.
Nesse interim, é muito provável que um mesmo parâmetro esteja relacionado a inúmeros caminhos lógicos possíveis, internamente. Quando isso acontece, não raro, o resultado é um código-fonte recheado de blocos condicionais excessivamente longos, prejudicando tanto a confiabilidade quanto a manutenibilidade do software.
Esse artigo mostrará como, a partir do uso de um padrão de projeto conhecido como Strategy, aliado à API de reflexão do Java, podemos transformar uma aplicação que, inicialmente, encontra-se na situação que acabamos de descrever, em outra totalmente refatorada, muito mais bem organizada e simples.
A aplicação
O programa que estudaremos é um utilitário de atualização de propriedades em um arquivo de texto, em que cada propriedade está necessariamente vinculada a um tipo de validador. Como premissa para uma propriedade desse arquivo ser atualizada, é necessário que o valor informado atenda as regras de validação estabelecidas para ela.
Soluções como essa são muito úteis, por exemplo, como utilitários para a configuração de sistemas maiores (automatizando a atualização de arquivos de propriedades, descritores de módulos, bancos de dados, dentre outras fontes).
A Tabela 1 apresenta os detalhes das três propriedades suportadas pelo projeto exemplo, bem como os critérios definidos para os valores por elas aceitos. Todas as condições nela estabeleci ...