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

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

If you can't read please download the document

description

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á

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

  • 1. Estratgias derefatorao:alm do be-a-bDanilo Sato@dtsatoApresentado no:Jun 2013Mariana Bravo@marivbMariana Bravo@marivb

2. O que faremos hoje:PacManNotPacMan 3. 3Setup e formao de pares(5 min)Introduo(10 min)Exerccio 1: Be-a-b(15 min)Exerccio 2: Estratgia(25 min)Exerccio 3: Viso(25 min)Agenda 4. 4Setup eformaode pares1a. WAN$ git clone http://bit.ly/workshop-ab pacman_workshop1b. LAN$ git clone ab@:/tmp/workshop pacman_workshopIP: 172.30.252.173Senha: ab20132. Abra o projeto na IDEEclipseIntelliJ3. Rode todos os testes 5. 5IntroduoConceitos eExemplo 6. 6Refatorao "Refatorao uma tcnicadisciplinada parareestruturarcdigo,alterando suaestruturainterna semalterar seucomportamentoexterno" 7. 7Mau cheiro " um sintoma quegeralmentecorresponde aum problema maisprofundo nosistema" 8. 8DesignincrementalFatores para avaliar asimplicidade de umdesign:1. Apropriado para opblico-alvo2. Comunicativo3. Fatorado4. Mnimo 9. Design Evolutivo do JUnit 10. 10Estratgiasderefatorao 11. 11ExemploIntroduzindoNullObject 12. 12Exerccio 1Be-a-b 13. 13AlgumasdefiniesMaze 14. 14TileTile atual corresponde aocentro do Ator 15. 15Qual oproblema?(maus cheiros)ObjetivosCoordenadasdo Tile esto espalhadascomo int x, yObsesso por primitivosAglomeradosde dadosTerminar a refatorao para usar novaclasse TileCoordinate:Foco na classe MazeEncapsular int x, y dentro da novaclasse 16. 16Estratgia derefatoraoPassar a nova estrutura doMazeBuilder no construtor do MazeCriar um novo mtodo com a assinaturacerta (usando TDD) e delega para oantigo:public Tile tileAt(TileCoordinate tileCoordinate) {return tileAt(tileCoordinate.x, tileCoordinate.y);}Muda a implementao para usarnewTilesAlterar o mtodo antigo para chamar omtodo novopublic Tile tileAt(int x, int y) {return tileAt(new TileCoordinate(x, y));} 17. 17Estratgia derefatoraoSafeDelete no mtodo isValidFazer Inline do mtodo velhoRemover duplicao no MazeTestRepetir abordagem para o mtodocanMoveRefatorar mtodos getScore,hasDotsLeft e toString para usar anova estrutura de dados 18. 18Estratgia derefatoraoLimpar a classe Maze:SafeDelete no campo tilesRemove argumento do construtorRenomeia newTiles para tilesLimpar a classe MazeBuilder:Remover matrizesTile[][]Re-encapsular x e y noTileCoordinate:Procurar ocorrnciasde uso docampo x ou y fora da classeTileCoordinateSubstituir para usar instncia deTileCoordinateMarcar int x e y como private 19. 19Exerccio 2Estratgia 20. 20Qual oproblema?(maus cheiros)ObjetivosAtributos/camposnecessriospara decidirpara onde andar so especficosparacada subclasse de ActorDifcil de testarConstrutoresdiferentes Pacman/GhostImplementaesdiferentesExtrair uma nova interfaceMovementStrategy para decidir qual oprximo TileDuasimplementaespara Pacman eGhostSubstituir TemplateMethod por composiona classe Actor 21. 21Estratgia derefatoraocom vocs!Discusso sobre a estratgia(5 minutos)Implementao(10 minutos) 22. 22Discusso / RetrospectivaO que deu certo? O que d pra melhorar? 23. 23Exerccio 3Viso 24. 24Qual oproblema?(maus cheiros)ObjetivosEstratgia derefatorao com vocs!Identificar um problema e discutir aestratgia(5 minutos)Implementao(10 minutos) 25. 25Discusso / RetrospectivaO que deu certo? O que d pra melhorar? 26. 26Referncias Refactoring: Improving the design ofexisting codeMartin Fowler, Kent Beck, et.alRefactoring to PatternsJoshua KerievskyExtreme Programming Explained 2ndEditionKent Beck, Cynthia Andres 27. Estratgias derefatorao:alm do be-a-bApresentado no:Jun 2013Danilo Sato@dtsatoMariana Bravo@marivb