refactoring like a boss!
DESCRIPTION
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.TRANSCRIPT
![Page 1: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/1.jpg)
Luís Otávio Cobucci Oblonczyk - @lcobucci
Refactoring likeRefactoring likea a BOSS!BOSS!
![Page 2: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/2.jpg)
Programar é fácil!
![Page 3: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/3.jpg)
![Page 4: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/4.jpg)
Qual o problema docódigo ruim?
![Page 5: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/5.jpg)
““Como o código ruim destruiuComo o código ruim destruiuuma empresa”uma empresa”
![Page 6: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/6.jpg)
2 anos de desenvolvimento
![Page 7: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/7.jpg)
+500.000 linhas de código
2 anos de desenvolvimento
![Page 8: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/8.jpg)
Nenhuma preocupaçãoNenhuma preocupaçãocom boas práticascom boas práticas
+500.000 linhas de código
2 anos de desenvolvimento
![Page 9: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/9.jpg)
![Page 10: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/10.jpg)
2 meses 4 meses 6 meses 1 ano 1 ano e 6 meses 2 anos0
20
40
60
80
100
120
Produtividade
![Page 11: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/11.jpg)
Vamos colocar Vamos colocar pressão no time!pressão no time!
![Page 12: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/12.jpg)
Precisamos de mais Precisamos de mais devs!devs!
![Page 13: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/13.jpg)
![Page 14: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/14.jpg)
2 meses4 meses
6 meses1 ano
1 ano e 6 meses2 anos
2 anos e 3 meses2 anos e 6 meses
0
20
40
60
80
100
120
Produtividade
![Page 15: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/15.jpg)
2 meses4 meses
6 meses1 ano
1 ano e 6 meses2 anos
2 anos e 3 meses2 anos e 6 meses
0
20
40
60
80
100
120
Produtividade
Produtividade esperada
![Page 16: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/16.jpg)
2 meses4 meses
6 meses1 ano
1 ano e 6 meses2 anos
2 anos e 3 meses2 anos e 6 meses
0
20
40
60
80
100
120
140
Produtividade
Produtividade esperada
Gastos
![Page 17: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/17.jpg)
refazer tudorefazer tudo!!Temos queTemos que
![Page 18: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/18.jpg)
![Page 19: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/19.jpg)
Os melhores devsOs melhores devsforam selecionadosforam selecionados
![Page 20: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/20.jpg)
Os outros trabalharãoOs outros trabalharãono sistema atualno sistema atual
![Page 21: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/21.jpg)
![Page 22: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/22.jpg)
Solução é refatorarSolução é refatorar
![Page 23: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/23.jpg)
O que é refatorar?
![Page 24: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/24.jpg)
Refatoração é basicamente o processo de alterar a
estrutura dos elementos do software sem mudar seus
comportamentos
![Page 25: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/25.jpg)
Para podermos refatorar um código é
fundamental a existência de testes
automatizados
![Page 26: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/26.jpg)
Técnicas de refatoração
![Page 27: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/27.jpg)
Nomes sem Nomes sem sentidosentido
![Page 28: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/28.jpg)
function z($x, $y){ return $x / $y;}
RenameRename
![Page 29: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/29.jpg)
function divide($dividend, $divisor){ return $dividend / $divisor;}
RenameRename
![Page 30: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/30.jpg)
Chamadas ou Chamadas ou expressões duplicadasexpressões duplicadas
![Page 31: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/31.jpg)
function sendEmail($name, $email, $message){ getSender()->prepare($name, $email);
return getSender()->send($message);}
Extract variableExtract variable
![Page 32: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/32.jpg)
function sendEmail($name, $email, $message){ $sender = getSender() $sender->prepare($name, $email);
return $sender->send($message);}
Extract variableExtract variable
![Page 33: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/33.jpg)
Classes com informações Classes com informações ou comportamentosou comportamentosa maisa mais
![Page 34: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/34.jpg)
class Pessoa{ private $nome; private $logradouro; private $numero; private $complemento; private $bairro; private $cidade;}
Extract classExtract class
![Page 35: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/35.jpg)
class Pessoa{ private $nome; private $endereco;}
class Endereco{ private $logradouro; private $numero; private $complemento; private $bairro; private $cidade;}
Extract classExtract class
![Page 36: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/36.jpg)
Métodos com Métodos com mais de umamais de umatarefatarefa
![Page 37: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/37.jpg)
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
![Page 38: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/38.jpg)
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
![Page 39: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/39.jpg)
Herança confusaHerança confusa
![Page 40: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/40.jpg)
class Pessoa{ private $nome; private $linguagensProgramacao;}
Pull up/push downPull up/push down
class Programador extends Pessoa{}
![Page 41: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/41.jpg)
class Pessoa{ private $nome;}
class Programador extends Pessoa{ private $linguagensProgramacao;}
Pull up/push downPull up/push down
![Page 42: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/42.jpg)
Programar é fácil!direito não é tão fácil!
![Page 43: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/43.jpg)
Object oriented programming
![Page 44: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/44.jpg)
Design Patterns
Object oriented programming
![Page 45: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/45.jpg)
Design Patterns
Object oriented programming
Clean code
![Page 46: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/46.jpg)
S.O.L.I.D. Principles
Design Patterns
Object oriented programming
Clean code
![Page 47: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/47.jpg)
S.O.L.I.D. Principles
Design Patterns
Object oriented programming
Clean code
Software metrics
![Page 48: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/48.jpg)
S.O.L.I.D. Principles
Design Patterns
Domain driven design
Object oriented programming
Clean code
Software metrics
![Page 49: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/49.jpg)
S.O.L.I.D. Principles
Design Patterns
Domain driven design
Object oriented programming
Clean code
Software metrics
![Page 50: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/50.jpg)
Precisamos treinar,Precisamos treinar,treinar e treinar...treinar e treinar...
![Page 51: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/51.jpg)
Considerando refatoraçãoConsiderando refatoraçãocomo como obrigaçãoobrigação
![Page 52: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/52.jpg)
Lembrando que assinamosLembrando que assinamostudotudo o que fazemos o que fazemos
![Page 53: Refactoring like a BOSS!](https://reader033.vdocuments.us/reader033/viewer/2022050804/54b374364a79594e7d8b46e3/html5/thumbnails/53.jpg)
Luís Otávio Cobucci Oblonczyk
@lcobucci
http://about.me/lcobucci
Obrigado!
http://slideshare.net/lcobucci