refactoring like a boss

Download Refactoring like a boss

Post on 24-May-2015

256 views

Category:

Education

2 download

Embed Size (px)

DESCRIPTION

Sabe aquele arquivo com 5000000 linhas e que você tem que acender umas velas pra abrir ele? Então, aqui te daremos as armas corretas para exterminá-lo e para NUNCA MAIS criar monstros como ele! A equipe Meritt irá mostrar como trazer para o cotidiano as práticas de clean code e o desafio de implementação em um projeto que já está no ar.

TRANSCRIPT

  • 1. Lus Otvio Cobucci Oblonczyk - @lcobucciRefactoring like a BOSS!

2. Lus Otvio Cobucci Oblonczyk@lcobucciEvangelista PHP Desenvolvedor desde 2003 http://about.me/lcobucci 3. Programar fcil! 4. Qual o problema do cdigo ruim? 5. Como o cdigo ruim destruiu uma empresa 6. 2 anos de desenvolvimento 7. 2 anos de desenvolvimento +500.000 linhas de cdigo 8. 2 anos de desenvolvimento +500.000 linhas de cdigo Nenhuma preocupao com boas prticas 9. 12010080Produtividade6040200 2 meses4 meses6 meses1 ano1 ano e 6 meses2 anos 10. Vamos colocar presso no time! 11. Precisamos de mais devs! 12. 1201008060Produtividade40200 4 meses 2 meses1 ano 6 meses2 anos 1 ano e 6 meses2 anos e 6 meses 2 anos e 3 meses 13. 12010080Produtividade Produtividade esperada6040200 4 meses 2 meses1 ano 6 meses2 anos 1 ano e 6 meses2 anos e 6 meses 2 anos e 3 meses 14. 14012010080Produtividade Produtividade esperada Gastos6040200 4 meses 2 meses1 ano 6 meses2 anos 1 ano e 6 meses2 anos e 6 meses 2 anos e 3 meses 15. Temos querefazer tudo! 16. Os melhores devs foram selecionados 17. Os outros trabalharo no sistema atual 18. Soluo refatorar 19. O que refatorar? 20. Refatorao basicamente o processo de alterar a estrutura dos elementos do software sem mudar seus comportamentos 21. Para podermos refatorar um cdigo fundamental a existncia de testes automatizados 22. Tcnicas de refatorao 23. Nomes sem sentido 24. Rename function divide($x, $y) { return $x / $y; } 25. Rename function divide($dividend, $divisor) { return $dividend / $divisor; } 26. Chamadas ou expresses duplicadas 27. Extract variable function sendEmail($name, $email, $message) { getSender()->prepare($name, $email); }return getSender()->send($message); 28. Extract variable function sendEmail($name, $email, $message) { $sender = getSender(); $sender->prepare($name, $email); }return $sender->send($message); 29. Classes violando o SRP 30. Extract class class Pessoa { private $nome; private $logradouro; private $numero; private $complemento; private $bairro; private $cidade; } 31. Extract class class Pessoa { private $nome; private $endereco; }class Endereco { private $logradouro; private $numero; private $complemento; private $bairro; private $cidade; } 32. Mtodos violando o SRP 33. Extract Method 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'); 34. Extract Method 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]); } } 35. Herana confusa 36. Pull up / push down class Pessoa { private $nome; private $linguagensProgramacao; } class Programador extends Pessoa { } 37. Pull up / push down class Pessoa { private $nome; } class Programador extends Pessoa { private $linguagensProgramacao; } 38. Programar fcil!direito no to fcil! 39. Object oriented programming 40. Object oriented programmingDesign Patterns 41. Object oriented programmingDesign PatternsClean code 42. Object oriented programming S.O.L.I.D. PrinciplesDesign PatternsClean code 43. Object oriented programming S.O.L.I.D. Principles Software metrics Design PatternsClean code 44. Domain driven design Object oriented programming S.O.L.I.D. Principles Software metrics Design PatternsClean code 45. Domain driven design Object oriented programming S.O.L.I.D. Principles Software metrics Design PatternsClean code 46. Precisamos treinar, treinar e treinar... 47. Considerando refatorao como obrigao 48. Lembrando que assinamos tudo o que fazemos 49. Obrigado! Lus Otvio Cobucci Oblonczykhttp://about.me/lcobucci http://slideshare.net/lcobucci @lcobucci