Refactoring like a BOSS!

609 visualizações

Publicada em

Nesta palestra abordamos a importância da escrita de códigos realmente limpos e algumas técnicas básicas de rectoring para resolver os débitos técnicos dos nossos projetos.

Publicada em: Tecnologia

Refactoring like a BOSS!

  1. 1. Luís Otávio Cobucci Oblonczyk - @lcobucci Refactoring likeRefactoring like aa BOSS!BOSS!
  2. 2. Programar é fácil!
  3. 3. Qual o problema do código ruim?
  4. 4. ““Como o código ruim destruiuComo o código ruim destruiu uma empresa”uma empresa”
  5. 5. 2 anos de desenvolvimento
  6. 6. +500.000 linhas de código 2 anos de desenvolvimento
  7. 7. Nenhuma preocupaçãoNenhuma preocupação com boas práticascom boas práticas +500.000 linhas de código 2 anos de desenvolvimento
  8. 8. 2 meses 4 meses 6 meses 1 ano 1 ano e 6 meses 2 anos 0 20 40 60 80 100 120 Produtividade
  9. 9. Vamos colocarVamos colocar pressão no time!pressão no time!
  10. 10. Precisamos de maisPrecisamos de mais devs!devs!
  11. 11. 2 meses 4 meses 6 meses 1 ano 1 ano e 6 meses 2 anos 2 anos e 3 meses 2 anos e 6 meses 0 20 40 60 80 100 120 Produtividade
  12. 12. 2 meses 4 meses 6 meses 1 ano 1 ano e 6 meses 2 anos 2 anos e 3 meses 2 anos e 6 meses 0 20 40 60 80 100 120 Produtividade Produtividade esperada
  13. 13. 2 meses 4 meses 6 meses 1 ano 1 ano e 6 meses 2 anos 2 anos e 3 meses 2 anos e 6 meses 0 20 40 60 80 100 120 140 Produtividade Produtividade esperada Gastos
  14. 14. refazer tudorefazer tudo!! Temos queTemos que
  15. 15. Os melhores devsOs melhores devs foram selecionadosforam selecionados
  16. 16. Os outros trabalharãoOs outros trabalharão no sistema atualno sistema atual
  17. 17. Solução é refatorarSolução é refatorar
  18. 18. O que é refatorar?
  19. 19. Refatoração é basicamente o processo de alterar a estrutura dos elementos do software sem mudar seus comportamentos
  20. 20. Para podermos refatorar um código é fundamental a existência de testes automatizados
  21. 21. Técnicas de refatoração
  22. 22. Nomes semNomes sem sentidosentido
  23. 23. function z($x, $y) { return $x / $y; } RenameRename
  24. 24. function divide($dividend, $divisor) { return $dividend / $divisor; } RenameRename
  25. 25. Chamadas ouChamadas ou expressões duplicadasexpressões duplicadas
  26. 26. function sendEmail($name, $email, $message) { getSender()->prepare($name, $email); return getSender()->send($message); } Extract variableExtract variable
  27. 27. function sendEmail($name, $email, $message) { $sender = getSender() $sender->prepare($name, $email); return $sender->send($message); } Extract variableExtract variable
  28. 28. Classes com informaçõesClasses com informações ou comportamentosou comportamentos a maisa mais
  29. 29. class Pessoa { private $nome; private $logradouro; private $numero; private $complemento; private $bairro; private $cidade; } Extract classExtract class
  30. 30. class Pessoa { private $nome; private $endereco; } class Endereco { private $logradouro; private $numero; private $complemento; private $bairro; private $cidade; } Extract classExtract class
  31. 31. Métodos comMétodos com mais de umamais de uma tarefatarefa
  32. 32. class LogParser { const PATTERN = '([0-9]{4}-[0-9]{2}-[0-9]{2})'; public function getDayOfWeek($logLine) { preg_match(self::PATTERN, $logLine, $matches); $date = new DateTime($matches[0]); return $date->format('l'); } } Extract MethodExtract Method
  33. 33. class LogParser { const PATTERN = '([0-9]{4}-[0-9]{2}-[0-9]{2})'; public function getDayOfWeek($logLine) { return $this->getDate($logLine)->format('l'); } protected function getDate($logLine) { preg_match(self::PATTERN, $logLine, $matches); return new DateTime($matches[0]); } } Extract MethodExtract Method
  34. 34. Herança confusaHerança confusa
  35. 35. class Pessoa { private $nome; private $linguagensProgramacao; } Pull up/push downPull up/push down class Programador extends Pessoa { }
  36. 36. class Pessoa { private $nome; } class Programador extends Pessoa { private $linguagensProgramacao; } Pull up/push downPull up/push down
  37. 37. Programar é fácil! direito não é tão fácil!
  38. 38. Object oriented programming
  39. 39. Design Patterns Object oriented programming
  40. 40. Design Patterns Object oriented programming Clean code
  41. 41. S.O.L.I.D. Principles Design Patterns Object oriented programming Clean code
  42. 42. S.O.L.I.D. Principles Design Patterns Object oriented programming Clean code Software metrics
  43. 43. S.O.L.I.D. Principles Design Patterns Domain driven design Object oriented programming Clean code Software metrics
  44. 44. S.O.L.I.D. Principles Design Patterns Domain driven design Object oriented programming Clean code Software metrics
  45. 45. Precisamos treinar,Precisamos treinar, treinar e treinar...treinar e treinar...
  46. 46. Considerando refatoraçãoConsiderando refatoração comocomo obrigaçãoobrigação
  47. 47. Lembrando que assinamosLembrando que assinamos tudotudo o que fazemoso que fazemos
  48. 48. Luís Otávio Cobucci Oblonczyk @lcobucci http://about.me/lcobucci Obrigado! http://slideshare.net/lcobucci

×