Luís Otávio Cobucci Oblonczyk - @lcobucci Refactoring like Refactoring like a a BOSS! BOSS!
Jan 12, 2015
Luís Otávio Cobucci Oblonczyk - @lcobucci
Refactoring likeRefactoring likea a BOSS!BOSS!
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
+500.000 linhas de código
2 anos de desenvolvimento
Nenhuma preocupaçãoNenhuma preocupaçãocom boas práticascom boas práticas
+500.000 linhas de código
2 anos de desenvolvimento
2 meses 4 meses 6 meses 1 ano 1 ano e 6 meses 2 anos0
20
40
60
80
100
120
Produtividade
Vamos colocar Vamos colocar pressão no time!pressão no time!
Precisamos de mais Precisamos de mais devs!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 z($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 com informações Classes com informações ou comportamentosou comportamentosa maisa mais
class Pessoa{ private $nome; private $logradouro; private $numero; private $complemento; private $bairro; private $cidade;}
Extract classExtract class
class Pessoa{ private $nome; private $endereco;}
class Endereco{ private $logradouro; private $numero; private $complemento; private $bairro; private $cidade;}
Extract classExtract class
Métodos com Métodos com mais de umamais de umatarefatarefa
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;}
class Programador extends Pessoa{ private $linguagensProgramacao;}
Pull up/push downPull up/push down
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