54
like a BOSS! Refactoring Luís Otávio Cobucci Oblonczyk - @lcobucci

Refactoring like a boss

Embed Size (px)

DESCRIPTION

Sabe aquele arquivo com 5000000 linhas e que você tem que acender umas velas pra abrir ele? Então, aqui te daremos as armas corretas para exterminá-lo e para NUNCA MAIS criar monstros como ele! A equipe Meritt irá mostrar como trazer para o cotidiano as práticas de clean code e o desafio de implementação em um projeto que já está no ar.

Citation preview

Page 1: Refactoring like a boss

like a BOSS!Refactoring

Luís Otávio Cobucci Oblonczyk - @lcobucci

Page 2: Refactoring like a boss

Luís Otávio Cobucci Oblonczyk@lcobucci

http://about.me/lcobucci

Evangelista PHPDesenvolvedor desde 2003

Page 3: Refactoring like a boss

Programar é fácil!

Page 4: Refactoring like a boss
Page 5: Refactoring like a boss

Qual o problema docódigo ruim?

Page 6: Refactoring like a boss

““Como o código ruim destruiuComo o código ruim destruiuuma empresa”uma empresa”

Page 7: Refactoring like a boss

2 anos de desenvolvimento

Page 8: Refactoring like a boss

2 anos de desenvolvimento

+500.000 linhas de código

Page 9: Refactoring like a boss

2 anos de desenvolvimento

Nenhuma preocupaçãoNenhuma preocupação

+500.000 linhas de código

com boas práticascom boas práticas

Page 10: Refactoring like a boss
Page 11: Refactoring like a boss

2 meses 4 meses 6 meses 1 ano 1 ano e 6 meses 2 anos0

20

40

60

80

100

120

Produtividade

Page 12: Refactoring like a boss

Vamos colocar pressão Vamos colocar pressão no time!no time!

Page 13: Refactoring like a boss

Precisamos de mais devs!Precisamos de mais devs!

Page 14: Refactoring like a boss
Page 15: Refactoring like a boss

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 16: Refactoring like a boss

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 17: Refactoring like a boss

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 18: Refactoring like a boss

refazer tudorefazer tudo!!Temos queTemos que

Page 19: Refactoring like a boss
Page 20: Refactoring like a boss

Os melhores devsOs melhores devsforam selecionadosforam selecionados

Page 21: Refactoring like a boss

Os outros trabalharãoOs outros trabalharãono sistema atualno sistema atual

Page 22: Refactoring like a boss
Page 23: Refactoring like a boss

Solução é refatorarSolução é refatorar

Page 24: Refactoring like a boss

O que é refatorar?

Page 25: Refactoring like a boss

Refatoração é basicamente o processo de alterar a estrutura dos elementos

do software sem mudar seus comportamentos

Page 26: Refactoring like a boss

Para podermos refatorar um código é fundamental a

existência de testes automatizados

Page 27: Refactoring like a boss

Técnicas de refatoração

Page 28: Refactoring like a boss

Nomes sem Nomes sem sentidosentido

Page 29: Refactoring like a boss

function divide($x, $y){ return $x / $y;}

RenameRename

Page 30: Refactoring like a boss

function divide($dividend, $divisor){ return $dividend / $divisor;}

RenameRename

Page 31: Refactoring like a boss

Chamadas ou Chamadas ou expressões duplicadasexpressões duplicadas

Page 32: Refactoring like a boss

function sendEmail($name, $email, $message){ getSender()->prepare($name, $email);

return getSender()->send($message);}

Extract variableExtract variable

Page 33: Refactoring like a boss

function sendEmail($name, $email, $message){ $sender = getSender(); $sender->prepare($name, $email);

return $sender->send($message);}

Extract variableExtract variable

Page 34: Refactoring like a boss

Classes violandoClasses violandoo SRPo SRP

Page 35: Refactoring like a boss

class Pessoa{ private $nome; private $logradouro; private $numero; private $complemento; private $bairro; private $cidade;}

Extract classExtract class

Page 36: Refactoring like a boss

class Pessoa{ private $nome; private $endereco;}

Extract classExtract classclass Endereco{ private $logradouro; private $numero; private $complemento; private $bairro; private $cidade;}

Page 37: Refactoring like a boss

Métodos violandoMétodos violandoo SRPo SRP

Page 38: Refactoring like a boss

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 39: Refactoring like a boss

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 40: Refactoring like a boss

Herança confusaHerança confusa

Page 41: Refactoring like a boss

class Pessoa{ private $nome; private $linguagensProgramacao;}

Pull up / push downPull up / push down

class Programador extends Pessoa{}

Page 42: Refactoring like a boss

class Pessoa{ private $nome;}

Pull up / push downPull up / push down

class Programador extends Pessoa{ private $linguagensProgramacao;}

Page 43: Refactoring like a boss

Programar é fácil!direito não é tão fácil!

Page 44: Refactoring like a boss

Object oriented programming

Page 45: Refactoring like a boss

Design Patterns

Object oriented programming

Page 46: Refactoring like a boss

Design Patterns

Object oriented programming

Clean code

Page 47: Refactoring like a boss

S.O.L.I.D. Principles

Design Patterns

Object oriented programming

Clean code

Page 48: Refactoring like a boss

S.O.L.I.D. Principles

Design Patterns

Object oriented programming

Clean code

Software metrics

Page 49: Refactoring like a boss

S.O.L.I.D. Principles

Design Patterns

Domain driven design

Object oriented programming

Clean code

Software metrics

Page 50: Refactoring like a boss

S.O.L.I.D. Principles

Design Patterns

Domain driven design

Object oriented programming

Clean code

Software metrics

Page 51: Refactoring like a boss

Precisamos treinar,Precisamos treinar,treinar e treinar...treinar e treinar...

Page 52: Refactoring like a boss

Considerando refatoraçãoConsiderando refatoraçãocomo como obrigaçãoobrigação

Page 53: Refactoring like a boss

Lembrando que assinamosLembrando que assinamostudotudo o que fazemos o que fazemos

Page 54: Refactoring like a boss

Luís Otávio Cobucci Oblonczyk

@lcobucci

http://about.me/lcobucci

Obrigado!

http://slideshare.net/lcobucci