segunda-feira, 30 de setembro de 2013

Introdução a Refatoração



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