Luís Otávio Cobucci Oblonczyk - @lcobucci
Refactoring likeRefactoring like
aa BOSS!BOSS!
Programar é fácil!
Qual o problema do
código ruim?
““Como o código ruim destruiuComo o código ruim destruiu
uma empresa”uma empresa”
2 anos de desenvolvimento
+500.000 linhas de
código
2 anos de desenvolvimento
Nenhuma preocupaçãoNenhuma preocupação
com 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 anos
0
20
40
60
80
100
120
Produtividade
Vamos colocarVamos colocar
pressão no time!pressão no time!
Precisamos de maisPrecisamos de mais
devs!devs!
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
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
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
refazer tudorefazer tudo!!
Temos queTemos que
Os melhores devsOs melhores devs
foram selecionadosforam selecionados
Os outros trabalharãoOs outros trabalharão
no 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 semNomes sem
sentidosentido
function z($x, $y)
{
return $x / $y;
}
RenameRename
function divide($dividend, $divisor)
{
return $dividend / $divisor;
}
RenameRename
Chamadas ouChamadas 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çõesClasses com informações
ou comportamentosou comportamentos
a 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 comMétodos com
mais de umamais de uma
tarefatarefa
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ção
comocomo obrigaçãoobrigação
Lembrando que assinamosLembrando que assinamos
tudotudo o que fazemoso que fazemos
Luís Otávio Cobucci Oblonczyk
@lcobucci
http://about.me/lcobucci
Obrigado!
http://slideshare.net/lcobucci

Refactoring like a BOSS!