Luís Otávio Cobucci Oblonczyk - @lcobucci

Refactoring
like a BOSS!
Luís Otávio Cobucci Oblonczyk

@lcobucci

Evangelista PHP
Desenvolvedor desde 2003
http://about.me/lcobucci
Programar é fácil!
Qual o problema do
código ruim?
“Como o código ruim destruiu
uma empresa”
2 anos de desenvolvimento
2 anos de desenvolvimento
+500.000 linhas de código
2 anos de desenvolvimento
+500.000 linhas de código
Nenhuma preocupação
com boas práticas
120

100

80

Produtividade

60

40

20

0
2 meses

4 meses

6 meses

1 ano

1 ano e 6 meses

2 anos
Vamos colocar pressão
no time!
Precisamos de mais devs!
120

100

80

60

Produtividade

40

20

0
4 meses
2 meses

1 ano
6 meses

2 anos
1 ano e 6 meses

2 anos e 6 meses
2 anos...
120

100

80

Produtividade
Produtividade esperada

60

40

20

0
4 meses
2 meses

1 ano
6 meses

2 anos
1 ano e 6 meses

...
140

120

100

80

Produtividade
Produtividade esperada
Gastos

60

40

20

0
4 meses
2 meses

1 ano
6 meses

2 anos
1 ano...
Temos que

refazer tudo!
Os melhores devs
foram selecionados
Os outros trabalharão
no sistema atual
Soluçã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
sentido
Rename
function divide($x, $y)
{
return $x / $y;
}
Rename
function divide($dividend, $divisor)
{
return $dividend / $divisor;
}
Chamadas ou
expressões duplicadas
Extract variable
function sendEmail($name, $email, $message)
{
getSender()->prepare($name, $email);
}

return getSender()-...
Extract variable
function sendEmail($name, $email, $message)
{
$sender = getSender();
$sender->prepare($name, $email);
}

...
Classes violando
o SRP
Extract class
class Pessoa
{
private $nome;
private $logradouro;
private $numero;
private $complemento;
private $bairro;
p...
Extract class
class Pessoa
{
private $nome;
private $endereco;
}

class Endereco
{
private $logradouro;
private $numero;
p...
Métodos violando
o SRP
Extract Method
class LogParser
{

}

const PATTERN = '([0-9]{4}-[0-9]{2}-[0-9]{2})';
public function getDayOfWeek($logLine...
Extract Method
class LogParser
{

const PATTERN = '([0-9]{4}-[0-9]{2}-[0-9]{2})';
public function getDayOfWeek($logLine)
{...
Herança confusa
Pull up / push down
class Pessoa
{
private $nome;
private $linguagensProgramacao;
}
class Programador extends Pessoa
{
}
Pull up / push down
class Pessoa
{
private $nome;
}
class Programador extends Pessoa
{
private $linguagensProgramacao;
}
Programar é fácil!

direito não é tão fácil!
Object oriented programming
Object oriented programming

Design Patterns
Object oriented programming

Design Patterns

Clean code
Object oriented programming
S.O.L.I.D. Principles

Design Patterns

Clean code
Object oriented programming
S.O.L.I.D. Principles
Software metrics
Design Patterns

Clean code
Domain driven design
Object oriented programming
S.O.L.I.D. Principles
Software metrics
Design Patterns

Clean code
Domain driven design
Object oriented programming
S.O.L.I.D. Principles
Software metrics
Design Patterns

Clean code
Precisamos treinar,
treinar e treinar...
Considerando refatoração
como obrigação
Lembrando que assinamos
tudo o que fazemos
Obrigado!
Luís Otávio Cobucci Oblonczyk

http://about.me/lcobucci
http://slideshare.net/lcobucci
@lcobucci
Refactoring like a boss
Refactoring like a boss
Refactoring like a boss
Refactoring like a boss
Refactoring like a boss
Upcoming SlideShare
Loading in …5
×

Refactoring like a boss

641 views

Published on

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.

Published in: Education
0 Comments
3 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
641
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
2
Comments
0
Likes
3
Embeds 0
No embeds

No notes for slide

Refactoring like a boss

  1. 1. Luís Otávio Cobucci Oblonczyk - @lcobucci Refactoring like a BOSS!
  2. 2. Luís Otávio Cobucci Oblonczyk @lcobucci Evangelista PHP Desenvolvedor desde 2003 http://about.me/lcobucci
  3. 3. Programar é fácil!
  4. 4. Qual o problema do código ruim?
  5. 5. “Como o código ruim destruiu uma empresa”
  6. 6. 2 anos de desenvolvimento
  7. 7. 2 anos de desenvolvimento +500.000 linhas de código
  8. 8. 2 anos de desenvolvimento +500.000 linhas de código Nenhuma preocupação com boas práticas
  9. 9. 120 100 80 Produtividade 60 40 20 0 2 meses 4 meses 6 meses 1 ano 1 ano e 6 meses 2 anos
  10. 10. Vamos colocar pressão no time!
  11. 11. Precisamos de mais devs!
  12. 12. 120 100 80 60 Produtividade 40 20 0 4 meses 2 meses 1 ano 6 meses 2 anos 1 ano e 6 meses 2 anos e 6 meses 2 anos e 3 meses
  13. 13. 120 100 80 Produtividade Produtividade esperada 60 40 20 0 4 meses 2 meses 1 ano 6 meses 2 anos 1 ano e 6 meses 2 anos e 6 meses 2 anos e 3 meses
  14. 14. 140 120 100 80 Produtividade Produtividade esperada Gastos 60 40 20 0 4 meses 2 meses 1 ano 6 meses 2 anos 1 ano e 6 meses 2 anos e 6 meses 2 anos e 3 meses
  15. 15. Temos que refazer tudo!
  16. 16. Os melhores devs foram selecionados
  17. 17. Os outros trabalharão no sistema atual
  18. 18. Solução é refatorar
  19. 19. O que é refatorar?
  20. 20. Refatoração é basicamente o processo de alterar a estrutura dos elementos do software sem mudar seus comportamentos
  21. 21. Para podermos refatorar um código é fundamental a existência de testes automatizados
  22. 22. Técnicas de refatoração
  23. 23. Nomes sem sentido
  24. 24. Rename function divide($x, $y) { return $x / $y; }
  25. 25. Rename function divide($dividend, $divisor) { return $dividend / $divisor; }
  26. 26. Chamadas ou expressões duplicadas
  27. 27. Extract variable function sendEmail($name, $email, $message) { getSender()->prepare($name, $email); } return getSender()->send($message);
  28. 28. Extract variable function sendEmail($name, $email, $message) { $sender = getSender(); $sender->prepare($name, $email); } return $sender->send($message);
  29. 29. Classes violando o SRP
  30. 30. Extract class class Pessoa { private $nome; private $logradouro; private $numero; private $complemento; private $bairro; private $cidade; }
  31. 31. Extract class class Pessoa { private $nome; private $endereco; } class Endereco { private $logradouro; private $numero; private $complemento; private $bairro; private $cidade; }
  32. 32. Métodos violando o SRP
  33. 33. Extract Method 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');
  34. 34. Extract 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]); } }
  35. 35. Herança confusa
  36. 36. Pull up / push down class Pessoa { private $nome; private $linguagensProgramacao; } class Programador extends Pessoa { }
  37. 37. Pull up / push down class Pessoa { private $nome; } class Programador extends Pessoa { private $linguagensProgramacao; }
  38. 38. Programar é fácil! direito não é tão fácil!
  39. 39. Object oriented programming
  40. 40. Object oriented programming Design Patterns
  41. 41. Object oriented programming Design Patterns Clean code
  42. 42. Object oriented programming S.O.L.I.D. Principles Design Patterns Clean code
  43. 43. Object oriented programming S.O.L.I.D. Principles Software metrics Design Patterns Clean code
  44. 44. Domain driven design Object oriented programming S.O.L.I.D. Principles Software metrics Design Patterns Clean code
  45. 45. Domain driven design Object oriented programming S.O.L.I.D. Principles Software metrics Design Patterns Clean code
  46. 46. Precisamos treinar, treinar e treinar...
  47. 47. Considerando refatoração como obrigação
  48. 48. Lembrando que assinamos tudo o que fazemos
  49. 49. Obrigado! Luís Otávio Cobucci Oblonczyk http://about.me/lcobucci http://slideshare.net/lcobucci @lcobucci

×