Estratégias de Refatoração: além do be-a-bá

920 views

Published on

Slides do workshop apresentado na Agile Brazil 2013 por Danilo Sato e Mariana Bravo: Estratégias de refatoração além do be-a-bá

Published in: Technology
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
920
On SlideShare
0
From Embeds
0
Number of Embeds
17
Actions
Shares
0
Downloads
29
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Estratégias de Refatoração: além do be-a-bá

  1. 1. Estratégias derefatoração:além do be-a-báDanilo Sato@dtsatoApresentado no:Jun 2013Mariana Bravo@marivbMariana Bravo@marivb
  2. 2. O que faremos hoje:PacManNotPacMan
  3. 3. 3Setup e formação de pares(5 min)Introdução(10 min)Exercício 1: Be-a-bá(15 min)Exercício 2: Estratégia(25 min)Exercício 3: Visão(25 min)Agenda
  4. 4. 4Setup eformaçãode pares1a. WAN$ git clone http://bit.ly/workshop-ab pacman_workshop1b. LAN$ git clone ab@<IP>:/tmp/workshop pacman_workshopIP: 172.30.252.173Senha: ab20132. Abra o projeto na IDE●Eclipse●IntelliJ3. Rode todos os testes
  5. 5. 5IntroduçãoConceitos eExemplo
  6. 6. 6Refatoração "Refatoração éuma técnicadisciplinada parareestruturarcódigo,alterando suaestruturainterna semalterar seucomportamentoexterno"
  7. 7. 7Mau cheiro "É um sintoma quegeralmentecorresponde aum problema maisprofundo nosistema"
  8. 8. 8DesignincrementalFatores para avaliar asimplicidade de umdesign:1. Apropriado para opúblico-alvo2. Comunicativo3. Fatorado4. Mínimo
  9. 9. Design Evolutivo do JUnit
  10. 10. 10Estratégiasderefatoração
  11. 11. 11ExemploIntroduzindoNullObject
  12. 12. 12Exercício 1Be-a-bá
  13. 13. 13AlgumasdefiniçõesMaze
  14. 14. 14TileTile atual corresponde aocentro do Ator
  15. 15. 15Qual oproblema?(maus cheiros)ObjetivosCoordenadasdo Tile estão espalhadascomo int x, y●Obsessão por primitivos●Aglomeradosde dadosTerminar a refatoração para usar novaclasse TileCoordinate:●Foco na classe MazeEncapsular int x, y dentro da novaclasse
  16. 16. 16Estratégia derefatoração●Passar a nova estrutura doMazeBuilder no construtor do Maze●Criar um novo método com a assinaturacerta (usando TDD) e delega para oantigo:public Tile tileAt(TileCoordinate tileCoordinate) {•return tileAt(tileCoordinate.x, tileCoordinate.y);•}●Muda a implementação para usarnewTiles●Alterar o método antigo para chamar ométodo novopublic Tile tileAt(int x, int y) {return tileAt(new TileCoordinate(x, y));}
  17. 17. 17Estratégia derefatoração●SafeDelete no método isValid●Fazer Inline do método velho●Remover duplicação no MazeTest●Repetir abordagem para o métodocanMove●Refatorar métodos getScore,hasDotsLeft e toString para usar anova estrutura de dados
  18. 18. 18Estratégia derefatoração●Limpar a classe Maze:●SafeDelete no campo tiles●Remove argumento do construtor●Renomeia newTiles para tiles●Limpar a classe MazeBuilder:●Remover matrizesTile[][]●Re-encapsular x e y noTileCoordinate:●Procurar ocorrênciasde uso docampo x ou y fora da classeTileCoordinate●Substituir para usar instância deTileCoordinate●Marcar int x e y como private
  19. 19. 19Exercício 2Estratégia
  20. 20. 20Qual oproblema?(maus cheiros)ObjetivosAtributos/camposnecessáriospara decidirpara onde andar são específicosparacada subclasse de Actor●Difícil de testar●Construtoresdiferentes Pacman/Ghost●Implementaçõesdiferentes●Extrair uma nova interfaceMovementStrategy para decidir qual opróximo Tile●Duasimplementaçõespara Pacman eGhostSubstituir TemplateMethod por composiçãona classe Actor
  21. 21. 21Estratégia derefatoraçãoÉcom vocês!Discussão sobre a estratégia(5 minutos)Implementação(10 minutos)
  22. 22. 22Discussão / RetrospectivaO que deu certo? O que dá pra melhorar?
  23. 23. 23Exercício 3Visão
  24. 24. 24Qual oproblema?(maus cheiros)ObjetivosEstratégia derefatoraçãoÉ com vocês!Identificar um problema e discutir aestratégia(5 minutos)Implementação(10 minutos)
  25. 25. 25Discussão / RetrospectivaO que deu certo? O que dá pra melhorar?
  26. 26. 26Referências Refactoring: Improving the design ofexisting codeMartin Fowler, Kent Beck, et.alRefactoring to PatternsJoshua KerievskyExtreme Programming Explained 2ndEditionKent Beck, Cynthia Andres
  27. 27. Estratégias derefatoração:além do be-a-báApresentado no:Jun 2013Danilo Sato@dtsatoMariana Bravo@marivb

×