refactoring like a boss!

Post on 12-Jan-2015

504 Views

Category:

Technology

2 Downloads

Preview:

Click to see full reader

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

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

top related