Post on 24-May-2015
description
like a BOSS!Refactoring
Luís Otávio Cobucci Oblonczyk - @lcobucci
Luís Otávio Cobucci Oblonczyk@lcobucci
http://about.me/lcobucci
Evangelista PHPDesenvolvedor desde 2003
Programar é fácil!
Qual o problema docódigo ruim?
““Como o código ruim destruiuComo o código ruim destruiuuma empresa”uma empresa”
2 anos de desenvolvimento
2 anos de desenvolvimento
+500.000 linhas de código
2 anos de desenvolvimento
Nenhuma preocupaçãoNenhuma preocupação
+500.000 linhas de código
com boas práticascom boas práticas
2 meses 4 meses 6 meses 1 ano 1 ano e 6 meses 2 anos0
20
40
60
80
100
120
Produtividade
Vamos colocar pressão Vamos colocar pressão no time!no time!
Precisamos de mais devs!Precisamos de mais devs!
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
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
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
refazer tudorefazer tudo!!Temos queTemos que
Os melhores devsOs melhores devsforam selecionadosforam selecionados
Os outros trabalharãoOs outros trabalharãono sistema atualno sistema atual
Solução é refatorarSolução é refatorar
O que é refatorar?
Refatoração é basicamente o processo de alterar a estrutura dos elementos
do software sem mudar seus comportamentos
Para podermos refatorar um código é fundamental a
existência de testes automatizados
Técnicas de refatoração
Nomes sem Nomes sem sentidosentido
function divide($x, $y){ return $x / $y;}
RenameRename
function divide($dividend, $divisor){ return $dividend / $divisor;}
RenameRename
Chamadas ou Chamadas ou expressões duplicadasexpressões duplicadas
function sendEmail($name, $email, $message){ getSender()->prepare($name, $email);
return getSender()->send($message);}
Extract variableExtract variable
function sendEmail($name, $email, $message){ $sender = getSender(); $sender->prepare($name, $email);
return $sender->send($message);}
Extract variableExtract variable
Classes violandoClasses violandoo SRPo SRP
class Pessoa{ private $nome; private $logradouro; private $numero; private $complemento; private $bairro; private $cidade;}
Extract classExtract class
class Pessoa{ private $nome; private $endereco;}
Extract classExtract classclass Endereco{ private $logradouro; private $numero; private $complemento; private $bairro; private $cidade;}
Métodos violandoMétodos violandoo SRPo SRP
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
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
Herança confusaHerança confusa
class Pessoa{ private $nome; private $linguagensProgramacao;}
Pull up / push downPull up / push down
class Programador extends Pessoa{}
class Pessoa{ private $nome;}
Pull up / push downPull up / push down
class Programador extends Pessoa{ private $linguagensProgramacao;}
Programar é fácil!direito não é tão fácil!
Object oriented programming
Design Patterns
Object oriented programming
Design Patterns
Object oriented programming
Clean code
S.O.L.I.D. Principles
Design Patterns
Object oriented programming
Clean code
S.O.L.I.D. Principles
Design Patterns
Object oriented programming
Clean code
Software metrics
S.O.L.I.D. Principles
Design Patterns
Domain driven design
Object oriented programming
Clean code
Software metrics
S.O.L.I.D. Principles
Design Patterns
Domain driven design
Object oriented programming
Clean code
Software metrics
Precisamos treinar,Precisamos treinar,treinar e treinar...treinar e treinar...
Considerando refatoraçãoConsiderando refatoraçãocomo como obrigaçãoobrigação
Lembrando que assinamosLembrando que assinamostudotudo o que fazemos o que fazemos
Luís Otávio Cobucci Oblonczyk
@lcobucci
http://about.me/lcobucci
Obrigado!
http://slideshare.net/lcobucci