Segundo o autor refatoração é o processo de alteração de um
sistema de software de modo que o comportamento externo do código não mude, mas
que sua estrutura interna seja melhorada.
Para que seja mais fácil entender vou utilizar
o exemplo usado pelo autor. Um programa para calcular e imprimir o valor devido
por um cliente em uma vídeo locadora. O programa calcula o valor devido, que
depende de quanto tempo o filme foi alugado e identifica o tipo do filme. Há
três tipos de filmes: normais, infantis e lançamentos.
Classes
Conforme o exemplo do autor os usuários do sistema
gostariam que a conta fosse impressa em HTML, para que esta possa ser acessada
pela WEB. Considerando o código atual teríamos que implementar um novo método
para a conta em HTML, que duplicaria muito do comportamento do método conta
existente, pois é impossível reutilizar o código do mesmo.
Para poupar trabalho poder ia-se copiar o código do
método conta, e fazer alterações para adapta-lo ao método contaHml, porém está
prática pode gerar uma inconsistência uma vez que as regras de cobrança podem
mudar, assim o desenvolvedor teria que aplicar essas mudanças nos dois métodos.
O primeiro passo da refatorção é criar um sólido
conjunto de testes, e executa-los antes de começar a alterar o código, para que
se obtenham os resultados antes da alteração. A cada alteração concluída devem-se
executar os mesmo testes para verificar se as funcionalidades permanecem
iguais.
Depois de criado os casos de testes, devemos decompor
o método conta em partes menores, visto que este método é muito extenso e não
pode ser reaproveitado. O autor faz muitas alterações na estrutura do código,
mas vamos focar apenas no switch que obtém o valor de cada filme, então criamos
um método que tenha esta funcionalidade, assim quando for criado o método
contaHtml podemos utiliza-lo ao invés de copia-lo.
Após a alteração feita é importante testar para
verificar se as funcionalidades permanecem integras, uma alteração importante
neste método seria alterar o nome da variável cada para um nome mais intuitivo,
então o autor chamou-a de umaLocação.
Como na maior parte dos casos, um método deve estar no
objeto cujos dados ele usa. Assim, o método
deve ser movido para a classe Locação.
Feito isso podemos utilizar este método tanto para
gerar o valor de cada locação do método conta quanto do método contaHtml. Caso
haja alguma alteração no cálculo do valor de cada locação, como por exemplo,
inserir uma nova categoria de filme devemos então alterar apenas este método.
Referências
Refatoração:Aperfeiçoando o Projeto de Código Existente do Martin Fowler, Arquiteto de Software.
Nenhum comentário:
Postar um comentário