Exemplos de Refactoring Alguns exemplos e considerações sobre Refactoring
Sumário O que e é Refactoring Quando usar Quando não usar Custos Exemplos
Mas o que é Refactoring mesmo? Técnica sistemática para reestruturação interna de sistemas: – altera as estruturas internas sem modificar as estruturas externas do sistema – É constituído de pequenos passos (refatorações) que isoladamente mudam pouco, mas que em conjunto podem produzir reestruturação significativa. – Após uma refatoração o sistema deve estar em perfeito funcionamento, o risco de instabilidade crítica inserido pela reestruturação deve ser mínimo.
Quando devo usar Refactoring? Em XP Em outros processos de desenvolvimento Em sistemas legados
Quando devo usar Refactoring? Em XP Em outros processos de desenvolvimento ou seja, Refactoring é indispensável!
Quando não usar Refactoring Sistema muito ruim: talvez seja melhor refazer o sistema Prazo muito curto: melhor refatorar depois
Mas tudo tem um custo... Sólida estrutura de testes automatizados Atualização da documentação Atualização dos testes
Exemplos – Extract Method void printDebit(double amount) { printBanner(); // print details System.out.println(name:+ _name); System.out.println(amount + amount); } void printDebit(String name, double amount) { printBanner(); printDetails(amount); } void printDetails(double amount) { System.out.println(name:+ _name); System.out.println(amount + amount); }
Exemplos – Singleton public String getNomeCliente(int id){ try{ BancoDados banco = new BancoDados(); String nomeCliente = banco.getNomeCliente(); }catch(Exception e){//...tratamento de exceção} } public String getNomeCliente(int id){ try{ BancoDados banco = BancoDados.getInstance(); return banco.getNomeCliente(); }catch(Exception e){//...tratamento de exceção} }
Exemplos – Singleton (ii) public static BancoDados getInstance(){ return (bancoDados == null) ? new BancoDados() : bancoDados; } private BancoDados(){ //inicializa objeto //cria conexao, etc }
Exemplos – Chain Constructors
Exemplos – Chain Constructors (ii)
Por fim... Antipatterns renomear variáveis, indendação, também são refactoring AOP