Refactoring
Introdução
- Entropia de software
- Programas começam num estado bonito, bem projetados mas, com tempo, as sucessivas
adições e mudanças fazem o programa perder sua estrutura
- Resultado final: espaguete
- Motivos
- Programa muda em formas não previstas
- Programa não é perfeitamente entendido (mesmo sendo nosso!) e o enxerto é menos
perfeito do que poderia ser
- Pressões de tempo
- Seria melhor reprojetar o sistema para limpá-lo, mas preferimos empurrar com a barriga
- Tem um excelente livro de Fowler sobre Refactoring
Refactoring
- Refactoring é um termo usado para descrever técnicas que
diminuem a dor de reprojetar
- Mudanças feitas a um programa que alteram apenas sua organização, não sua
funcionalidade
- Transformações que preservam o comportamento
Por que refactoring é importante?
- A única defesa contra a entropia de software
- Para consertar "bugs" de reusabilidade
- Permite adicionar padrões de projeto após escrever o programa
- Permite transformar um programa num framework
- Deixa você pensar na generalidade amanhã!
- Hoje: basta deixar funcionando
- Parece algo estranho a dizer, mas veremos que a turma do extreme programming acredita
nisso piamente!
- Necessário para software bonito
Problemas que refactoring pode resolver
- Código duplicado
- Elimina duplicação com novos métodos, novos objetos, movendo coisas comuns numa
superclasse
- Métodos longos
- Métodos devem ser coesos (ser longo é dica de que não está coeso)
- Métodos devem caber numa tela
- Métodos devem ser do mesmo nível de abstração
- Métodos devem estar na classe correta
- Acoplamento forte demais
- Longas listas de parâmetros
- Encapsula num objeto
- Muda o método para acessar o objeto
- Vê o que mais deveria estar no objeto
- switch e variáveis "tipo-de-objeto"
- Introduzir interfaces e aumentar o polimorfismo
Como fazer refactoring?
- Não faça refactoring e adição de funcionalidade ao
mesmo tempo
- Tenha testes automáticos prontos antes de fazer refactoring
- Faça mudanças muito pequenas de cada vez e teste, teste, teste
Quando fazer refactoring?
- Quando parece difícil de enxertar nova funcionalidade
- Se uma nova funcionalidade adicionou código feio
- Quando você não aguenta olhar para seu próprio código!
etc-1 programa próxima