Refatorar!Porque ninguém gosta de código que cheira mal
@andreitognolo
github.com/elsouzaeliaslsouza@gmail.com
"Um bom desenvolvedor consegue entenderqualquer código.”(Anônimo)
"Um bom programador consegue escrevercódigo que qualquer um entende"(Outro anônimo, mais sábio)
Human-Readable Code
Calendar cal = new Calendar.getInstance();cal.set(Calendar.YEAR, 2012);cal.set(Calendar.MONTH, CALENDAR.NOVEMBER);cal.set(...
Date data = geraData(15, Calendar.DECEMBER, 2013);System.out.println(data);
Segundos! São apenas segundos!Segundos! São apenas segundos!
Você acha que você sempre faz umcódigo bom?
Você acha que a gentesempre faz umcódigo bom?
Saca sóSaca só:/elsouza
if (!StringUtils.isNullOrEmpty(texto)&& !texto.equals("")) {//...}
itemDePauta.adicionaValor("campo" +++posicaoCampoNaTabela,texto.replaceAll("", "").replaceAll("n", "").trim());
O que fazer então?
Sempre refatorar
?
Parte IComo eu consigo tempo para refatorar?
100 joao if (...) {100 joao if (...)100 joao resultado = 1;100 joao if (...)100 joao resultado = 2;150 joaquim if (...)150...
"The single most important trait of a professional programmeris personal responsibility [...]. A professionalprogrammer do...
Tem refatoração que não daproblema...
if (!StringUtils.isNullOrEmpty(texto)&& !texto.equals("")) {//...}
if (!StringUtils.isNullOrEmpty(texto)) {//...}
itemDePauta.adicionaValor("campo" +++posicaoCampoNaTabela,texto.replaceAll("", "").replaceAll("n", "").trim());
itemDePauta.adicionaValor("campo" +++posicaoCampoNaTabela,texto.replaceAll("n", "").trim());
E isso é ainda mais verdadese você utilizar asferramentas derefatoração de suaIDE
sempre que você modificaalgo em um método, vocêtem que deixar ele melhordo que encontrouMoral da história
Ah, mas e quando tenho quealterar uma funcionalidade jáexistente, como eu faço?
#1
Tem teste?
Não...
Escrever testeImplementar
E quando o código já existe, funciona eeu quero melhorar?
O que é refatorar?
"é o processo de modificarum sistema de software paramelhorar a estrutura internado código sem alterarseu comportamentoext...
Alterar código que existe efunciona?
Se eu tenho cobertura de testes,eu sou corajoso
Escrever testeRefatorar
Eu começo a refatorar pelo mesmo caminhoque eu começo a implementar: o TESTE
EscrevertesteImplementarEscrevertesteRefatorar
Escrever testeImplementa nova funcionalidadeRefatora o que acabou de desenvolverRefatora o que já existe
Pequenas refatorações a cada momentoNão existem refatoraçõesmonstruosas sem pequenos passosPassos consistentes
Parte IITécnicas de refatoração
O que refatorar?
Code SmellsCódigo duplicadoCódigo duplicadoif (temComplexidadeCondicional){codigo = "Meu deus, como cheira mal";} else {co...
● Sistema de vendas● Cada venda tem itens● O valor total da venda é a soma dos itens● Uma venda pode ser parcelada● Se a v...
Métodolongo
ComplexidadecondicionalMétodolongo
ComplexidadecondicionalPrincípio daresponsabilidadeúnica (Classe enorme)Métodolongo
(clique para ver o vídeo)
1. Criar classe VendaAPrazo e VendaAVista2. Introduce Factory (roda teste)3. Alterar o método factory (roda teste)4. Class...
(clique para ver o vídeo)
Resumo● Ser responsável de verdade pelo seu código● Você não vai ter tempo/dinheiro para uma refatoração grande● Pequenos ...
Onde saber mais?
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal
Próximos SlideShares
Carregando em…5
×

DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal

840 visualizações

Publicada em

0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
840
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
27
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

DEVCAMP 2013 - Refatorar! porque ninguém gosta de código que cheira mal

  1. 1. Refatorar!Porque ninguém gosta de código que cheira mal
  2. 2. @andreitognolo
  3. 3. github.com/elsouzaeliaslsouza@gmail.com
  4. 4. "Um bom desenvolvedor consegue entenderqualquer código.”(Anônimo)
  5. 5. "Um bom programador consegue escrevercódigo que qualquer um entende"(Outro anônimo, mais sábio)
  6. 6. Human-Readable Code
  7. 7. Calendar cal = new Calendar.getInstance();cal.set(Calendar.YEAR, 2012);cal.set(Calendar.MONTH, CALENDAR.NOVEMBER);cal.set(Calendar.DAY, 20);Date data = cal.getTime();System.out.println(data);Fonte: Refactoring to Patterns (by Joshua Kerievsky)
  8. 8. Date data = geraData(15, Calendar.DECEMBER, 2013);System.out.println(data);
  9. 9. Segundos! São apenas segundos!Segundos! São apenas segundos!
  10. 10. Você acha que você sempre faz umcódigo bom?
  11. 11. Você acha que a gentesempre faz umcódigo bom?
  12. 12. Saca sóSaca só:/elsouza
  13. 13. if (!StringUtils.isNullOrEmpty(texto)&& !texto.equals("")) {//...}
  14. 14. itemDePauta.adicionaValor("campo" +++posicaoCampoNaTabela,texto.replaceAll("", "").replaceAll("n", "").trim());
  15. 15. O que fazer então?
  16. 16. Sempre refatorar
  17. 17. ?
  18. 18. Parte IComo eu consigo tempo para refatorar?
  19. 19. 100 joao if (...) {100 joao if (...)100 joao resultado = 1;100 joao if (...)100 joao resultado = 2;150 joaquim if (...)150 joaquim resultado = 3;100 joao }
  20. 20. "The single most important trait of a professional programmeris personal responsibility [...]. A professionalprogrammer does not passthat responsibility offon others".(Uncle Bob)
  21. 21. Tem refatoração que não daproblema...
  22. 22. if (!StringUtils.isNullOrEmpty(texto)&& !texto.equals("")) {//...}
  23. 23. if (!StringUtils.isNullOrEmpty(texto)) {//...}
  24. 24. itemDePauta.adicionaValor("campo" +++posicaoCampoNaTabela,texto.replaceAll("", "").replaceAll("n", "").trim());
  25. 25. itemDePauta.adicionaValor("campo" +++posicaoCampoNaTabela,texto.replaceAll("n", "").trim());
  26. 26. E isso é ainda mais verdadese você utilizar asferramentas derefatoração de suaIDE
  27. 27. sempre que você modificaalgo em um método, vocêtem que deixar ele melhordo que encontrouMoral da história
  28. 28. Ah, mas e quando tenho quealterar uma funcionalidade jáexistente, como eu faço?
  29. 29. #1
  30. 30. Tem teste?
  31. 31. Não...
  32. 32. Escrever testeImplementar
  33. 33. E quando o código já existe, funciona eeu quero melhorar?
  34. 34. O que é refatorar?
  35. 35. "é o processo de modificarum sistema de software paramelhorar a estrutura internado código sem alterarseu comportamentoexterno"Wikipedia
  36. 36. Alterar código que existe efunciona?
  37. 37. Se eu tenho cobertura de testes,eu sou corajoso
  38. 38. Escrever testeRefatorar
  39. 39. Eu começo a refatorar pelo mesmo caminhoque eu começo a implementar: o TESTE
  40. 40. EscrevertesteImplementarEscrevertesteRefatorar
  41. 41. Escrever testeImplementa nova funcionalidadeRefatora o que acabou de desenvolverRefatora o que já existe
  42. 42. Pequenas refatorações a cada momentoNão existem refatoraçõesmonstruosas sem pequenos passosPassos consistentes
  43. 43. Parte IITécnicas de refatoração
  44. 44. O que refatorar?
  45. 45. Code SmellsCódigo duplicadoCódigo duplicadoif (temComplexidadeCondicional){codigo = "Meu deus, como cheira mal";} else {codigo = "Legal!";}
  46. 46. ● Sistema de vendas● Cada venda tem itens● O valor total da venda é a soma dos itens● Uma venda pode ser parcelada● Se a venda for parcelada ela pode ter jurosCenário
  47. 47. Métodolongo
  48. 48. ComplexidadecondicionalMétodolongo
  49. 49. ComplexidadecondicionalPrincípio daresponsabilidadeúnica (Classe enorme)Métodolongo
  50. 50. (clique para ver o vídeo)
  51. 51. 1. Criar classe VendaAPrazo e VendaAVista2. Introduce Factory (roda teste)3. Alterar o método factory (roda teste)4. Classe Venda abstract5. Extract Method calcularJuros (roda teste)6. CalcularJuros na VendaAVista, retornar 1 (roda teste)7. CalcularJuros na VendaAPrazo, fazer conta (roda teste)8. CalcularJuros na Venda como abstract (roda teste)9. Tirar a factory (?)Roteiro
  52. 52. (clique para ver o vídeo)
  53. 53. Resumo● Ser responsável de verdade pelo seu código● Você não vai ter tempo/dinheiro para uma refatoração grande● Pequenos passos, passos consistentes● Refatorando continuamente● Saber identificar os smells é o primeiro passo● Conhecer as técnicas de refatoração é essencial
  54. 54. Onde saber mais?

×