refactoring like a boss!

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

Upload: luis-otavio-cobucci-oblonczyk

Post on 12-Jan-2015

507 views

Category:

Technology


2 download

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

Page 1: Refactoring like a BOSS!

Luís Otávio Cobucci Oblonczyk - @lcobucci

Refactoring likeRefactoring likea a BOSS!BOSS!

Page 2: Refactoring like a BOSS!

Programar é fácil!

Page 3: Refactoring like a BOSS!
Page 4: Refactoring like a BOSS!

Qual o problema docódigo ruim?

Page 5: Refactoring like a BOSS!

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

Page 6: Refactoring like a BOSS!

2 anos de desenvolvimento

Page 7: Refactoring like a BOSS!

+500.000 linhas de código

2 anos de desenvolvimento

Page 8: Refactoring like a BOSS!

Nenhuma preocupaçãoNenhuma preocupaçãocom boas práticascom boas práticas

+500.000 linhas de código

2 anos de desenvolvimento

Page 9: Refactoring like a BOSS!
Page 10: 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 11: Refactoring like a BOSS!

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

Page 12: Refactoring like a BOSS!

Precisamos de mais Precisamos de mais devs!devs!

Page 13: Refactoring like a BOSS!
Page 14: 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 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

Produtividade esperada

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

140

Produtividade

Produtividade esperada

Gastos

Page 17: Refactoring like a BOSS!

refazer tudorefazer tudo!!Temos queTemos que

Page 18: Refactoring like a BOSS!
Page 19: Refactoring like a BOSS!

Os melhores devsOs melhores devsforam selecionadosforam selecionados

Page 20: Refactoring like a BOSS!

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

Page 21: Refactoring like a BOSS!
Page 22: Refactoring like a BOSS!

Solução é refatorarSolução é refatorar

Page 23: Refactoring like a BOSS!

O que é refatorar?

Page 24: Refactoring like a BOSS!

Refatoração é basicamente o processo de alterar a

estrutura dos elementos do software sem mudar seus

comportamentos

Page 25: Refactoring like a BOSS!

Para podermos refatorar um código é

fundamental a existência de testes

automatizados

Page 26: Refactoring like a BOSS!

Técnicas de refatoração

Page 27: Refactoring like a BOSS!

Nomes sem Nomes sem sentidosentido

Page 28: Refactoring like a BOSS!

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

RenameRename

Page 29: Refactoring like a BOSS!

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

RenameRename

Page 30: Refactoring like a BOSS!

Chamadas ou Chamadas ou expressões duplicadasexpressões duplicadas

Page 31: Refactoring like a BOSS!

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

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

Extract variableExtract variable

Page 32: Refactoring like a BOSS!

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

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

Extract variableExtract variable

Page 33: Refactoring like a BOSS!

Classes com informações Classes com informações ou comportamentosou comportamentosa maisa mais

Page 34: Refactoring like a BOSS!

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

Extract classExtract class

Page 35: Refactoring like a BOSS!

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

class Endereco{ private $logradouro; private $numero; private $complemento; private $bairro; private $cidade;}

Extract classExtract class

Page 36: Refactoring like a BOSS!

Métodos com Métodos com mais de umamais de umatarefatarefa

Page 37: 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 38: 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 39: Refactoring like a BOSS!

Herança confusaHerança confusa

Page 40: Refactoring like a BOSS!

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

Pull up/push downPull up/push down

class Programador extends Pessoa{}

Page 41: Refactoring like a BOSS!

class Pessoa{ private $nome;}

class Programador extends Pessoa{ private $linguagensProgramacao;}

Pull up/push downPull up/push down

Page 42: Refactoring like a BOSS!

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

Page 43: Refactoring like a BOSS!

Object oriented programming

Page 44: Refactoring like a BOSS!

Design Patterns

Object oriented programming

Page 45: Refactoring like a BOSS!

Design Patterns

Object oriented programming

Clean code

Page 46: Refactoring like a BOSS!

S.O.L.I.D. Principles

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

Software metrics

Page 48: Refactoring like a BOSS!

S.O.L.I.D. Principles

Design Patterns

Domain driven design

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!

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

Page 51: Refactoring like a BOSS!

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

Page 52: Refactoring like a BOSS!

Lembrando que assinamosLembrando que assinamostudotudo o que fazemos o que fazemos

Page 53: Refactoring like a BOSS!

Luís Otávio Cobucci Oblonczyk

@lcobucci

http://about.me/lcobucci

Obrigado!

http://slideshare.net/lcobucci