Your code sucks, let's fix it! Objects Calisthenics

102
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects Calisthenics Objects Calisthenics Marcelo Siqueira Marcelo Siqueira @marcelosiqueira @marcelosiqueira

description

Objects Calisthenics são um conjunto de técnicas e regras que vão te ajudar a identificar áreas de problemas em seu código, e assim você irá escrever um código melhor, evitando armadilhas comuns.

Transcript of Your code sucks, let's fix it! Objects Calisthenics

Page 1: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks,Your code sucks,let’s fix it!let’s fix it!

Objects CalisthenicsObjects Calisthenics

Marcelo SiqueiraMarcelo Siqueira@marcelosiqueira@marcelosiqueira

Page 2: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Marcelo SiqueiraMarcelo Siqueira@marcelosiqueira@marcelosiqueira

Programador PHP/Python, Programador PHP/Python, Defensor de Software Defensor de Software

Livre e GNU/Linux, Nerd e Livre e GNU/Linux, Nerd e Empreendedor!Empreendedor!

Page 3: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Grupo PHPMSGrupo PHPMSO Grupo de Desenvolvedores PHP de Mato Grosso do O Grupo de Desenvolvedores PHP de Mato Grosso do Sul foi criado há 6 anos com objetivo de divulgar e Sul foi criado há 6 anos com objetivo de divulgar e incentivar a adoção da linguagem de programação incentivar a adoção da linguagem de programação PHP no desenvolvimento de software em Mato PHP no desenvolvimento de software em Mato Grosso do Sul, além de capacitar os profissionais Grosso do Sul, além de capacitar os profissionais promovendo encontros, DOJOs, workshops, palestras promovendo encontros, DOJOs, workshops, palestras e eventos em geral.e eventos em geral.

Alguns dados sobre o grupo:Alguns dados sobre o grupo:-mais de 600 membros na lista de discussão Google -mais de 600 membros na lista de discussão Google Groups;Groups;

-mais de 400 pessoas cutiram fan-page do grupo;-mais de 400 pessoas cutiram fan-page do grupo;

-mais de 100 membros no grupo do Facebook;-mais de 100 membros no grupo do Facebook;

Page 4: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Essa palestra foi baseado Essa palestra foi baseado nas palestras.nas palestras.

Page 5: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Essa palestra foi baseado Essa palestra foi baseado nas palestras.nas palestras.

Guilherme BlancoGuilherme Blanco@guilhermeblanco@guilhermeblanco

Object Calisthenics aplicado ao PHPObject Calisthenics aplicado ao PHP

Page 6: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Essa palestra foi baseado Essa palestra foi baseado nas palestras.nas palestras.

Guilherme BlancoGuilherme Blanco@guilhermeblanco@guilhermeblanco

Object Calisthenics aplicado ao PHPObject Calisthenics aplicado ao PHP

Rafael DohmsRafael Dohms@rdohms@rdohms

Object Calisthenics aplicado ao PHPObject Calisthenics aplicado ao PHP

Page 7: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Why does my code suck?Why does my code suck?

Page 8: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Por que meu código é Por que meu código é ruim?ruim?

Page 9: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Por que meu código é Por que meu código é ruim?ruim?

É legível?É legível?

Page 10: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Por que meu código é Por que meu código é ruim?ruim?

É legível?É legível?

É testávelÉ testável

Page 11: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Por que meu código é Por que meu código é ruim?ruim?

É legível?É legível?É fácil a manutenção?É fácil a manutenção?

É testávelÉ testável

Page 12: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Por que meu código é Por que meu código é ruim?ruim?

É legível?É legível?É fácil a manutenção?É fácil a manutenção?

É reusávelÉ reusável É testávelÉ testável

Page 13: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

O que acham disso?O que acham disso?

Page 14: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Suck code!Suck code!

Page 15: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Como melhorar isso?Como melhorar isso?

Page 16: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Object Object CalisthenicsCalisthenics

Page 17: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Object Object CalisthenicsCalisthenics

cal·is·then·ics cal·is·then·ics - substantivo - / kal s THeniks/ ˌ ə ˈ- substantivo - / kal s THeniks/ ˌ ə ˈTermo derivado do grego: "exercício", Termo derivado do grego: "exercício",

"exercício de relaxamento", "ginástica rítmica""exercício de relaxamento", "ginástica rítmica"

Page 18: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Object Object CalisthenicsCalisthenics

cal·is·then·ics cal·is·then·ics - substantivo - / kal s THeniks/ ˌ ə ˈ- substantivo - / kal s THeniks/ ˌ ə ˈTermo derivado do grego: "exercício", Termo derivado do grego: "exercício",

"exercício de relaxamento", "ginástica rítmica""exercício de relaxamento", "ginástica rítmica"

Uma variedade de exercícios simples eUma variedade de exercícios simples erítmicos para alcançar melhor qualidaderítmicos para alcançar melhor qualidade

de código e OO.de código e OO.

Page 19: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

““So here’s an exercise that So here’s an exercise that can help you to internalize can help you to internalize

principles of good principles of good object-oriented design and object-oriented design and

actually use them in real life.”actually use them in real life.”

--Jeff Bay--Jeff Bay

Page 20: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

““Então aqui está um exercício Então aqui está um exercício que pode ajudá-lo a que pode ajudá-lo a

internalizar princípios de um internalizar princípios de um bom design orientado a bom design orientado a

objeto e, na verdade, usá-las objeto e, na verdade, usá-las na vida real.”na vida real.”

--Jeff Bay--Jeff Bay

Page 21: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

““Então aqui está um exercício Então aqui está um exercício que pode ajudá-lo a que pode ajudá-lo a

internalizar princípios de um internalizar princípios de um bom design orientado a bom design orientado a

objeto e, na verdade, usá-las objeto e, na verdade, usá-las na vida real.”na vida real.”

--Jeff Bay--Jeff Bay

Importante:Importante:

PHP != JAVAPHP != JAVAAlgumas adaptações devem ser feitasAlgumas adaptações devem ser feitas

Page 22: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Regras:Regras:Nove (9) orientações "bem" simples Nove (9) orientações "bem" simples e que podem ser utilizadas em e que podem ser utilizadas em qualquer linguagem orientada a qualquer linguagem orientada a objetos.objetos.

Page 23: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Regras:Regras:Nove (9) orientações "bem" simples Nove (9) orientações "bem" simples e que podem ser utilizadas em e que podem ser utilizadas em qualquer linguagem orientada a qualquer linguagem orientada a objetos.objetos.

Repetindo:Repetindo:

PHP é !=PHP é !=Algumas adaptações devem ser feitasAlgumas adaptações devem ser feitas

Page 24: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC # 1OC # 1"Only "Only oneone indentation indentation

level level per methodper method""

Page 25: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC # 1OC # 1"Somente "Somente umum nível de nível de

indentação indentação por métodopor método""

Page 26: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC # 1OC # 1"Somente "Somente umum nível de nível de

indentação indentação por métodopor método""

Neologismo derivado da palavra inglesa Neologismo derivado da palavra inglesa "indentation", que significa "recuo"."indentation", que significa "recuo".

Page 27: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Page 28: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

00

11

2233

Page 29: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

00

11

2233

Page 30: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Page 31: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Espaço em brancoEspaço em branco

Page 32: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Espaço em brancoEspaço em branco

Logica duplicadaLogica duplicada

Page 33: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

00

1122

Page 34: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

00

1122

Page 35: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

IF de uma linha,IF de uma linha, operação simples operação simples

Page 36: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Return rápidoReturn rápido

IF de uma linha,IF de uma linha, operação simples operação simples

Page 37: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Return rápidoReturn rápido

IF de uma linha,IF de uma linha, operação simples operação simples

Função nativa C, mais rápida.Função nativa C, mais rápida.

Page 38: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Podemos melhorar!Podemos melhorar!

Page 39: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Interação rápidaInteração rápida

Método reusávelMétodo reusável

Page 40: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Interação rápidaInteração rápida

Método matches, resultadoMétodo matches, resultado “true” “true”

Método reusávelMétodo reusável

Page 41: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Interação rápidaInteração rápida

Método matches, resultadoMétodo matches, resultado “true” “true”

Retorno aceitável: Retorno aceitável: expectativa/retornoexpectativa/retornoMétodo reusávelMétodo reusável

Page 42: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Benefícios:Benefícios:

– – Maior coesão;Maior coesão;

– – Reduz a complexidade ciclomática;Reduz a complexidade ciclomática;

– – Métodos acabam fazendo apenas uma coisa, Métodos acabam fazendo apenas uma coisa, como deve ser;como deve ser;

– – Aumenta a reusabilidade.Aumenta a reusabilidade.

Regra Regra #1#1Somente um nível de indentação/recuo por métodoSomente um nível de indentação/recuo por método

Page 43: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 2# 2"Do "Do notnot use the use the 'else''else'

keyword"keyword"

Page 44: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 2# 2""NãoNão utilize a utilize a

palavra-chave palavra-chave 'else''else'""

Page 45: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Page 46: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Page 47: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Variável intermediáriaVariável intermediária

Variável intermediáriaVariável intermediária

Page 48: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Intermediária removidaIntermediária removida

Retorno rápidoRetorno rápido

Page 49: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Benefícios:Benefícios:

– – Ajuda a prevenir duplicação de código;Ajuda a prevenir duplicação de código;

– – Reduz a complexidade ciclomática;Reduz a complexidade ciclomática;

– – Faz o código ficar mais limpo, passando por um Faz o código ficar mais limpo, passando por um único caminho.único caminho.

Regra Regra #2#2NãoNão utilize a palavra-chave utilize a palavra-chave 'else''else'

Page 50: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 3# 3"Wrap primitive types "Wrap primitive types

and strings"and strings"

* if there is behavior* if there is behavior

AdaptedAdapted

Page 51: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 3# 3"Encapsule os tipos "Encapsule os tipos primitivos e strings"primitivos e strings"

* se eles possuírem * se eles possuírem comportamentocomportamento

AdaptadaAdaptada

Page 52: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Page 53: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Operaćão incorretaOperaćão incorreta

Page 54: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Operaćão incorretaOperaćão incorreta

Page 55: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Agora pode encapsular todas asAgora pode encapsular todas asoperações relacionadas com a animaçãooperações relacionadas com a animação

Page 56: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Benefícios:Benefícios:

– – Ajuda a identificar o que deve ser um objeto;Ajuda a identificar o que deve ser um objeto;

– – Indução de Tipo;Indução de Tipo;

– – Encapsulamento de operações.Encapsulamento de operações.

Regra Regra #2#2Encapsule os tipos primitivos e stringsEncapsule os tipos primitivos e strings

* se eles possuírem comportamento* se eles possuírem comportamento

Page 57: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 4# 4"Only one "Only one ->-> per line" per line"

* getter chain or a fluent * getter chain or a fluent interfaceinterface

AdaptedAdapted

Page 58: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 4# 4"Somente um ponto "Somente um ponto

(“arrow” para o PHP) por (“arrow” para o PHP) por linha"linha"

* cadeia getter ou uma * cadeia getter ou uma interface fluenteinterface fluente

AdaptadaAdaptada

Page 59: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

propriedades são mais difíceis de testarpropriedades são mais difíceis de testar

Sem espaço em brancoSem espaço em branco

Page 60: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Page 61: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Interface fluenteInterface fluente

Page 62: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Interface fluenteInterface fluente

Operadores alinhadosOperadores alinhados

Page 63: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Interface fluenteInterface fluente

Operadores alinhadosOperadores alinhados

Somente geters (nenhuma operação)Somente geters (nenhuma operação)

Interface fluenteInterface fluente

Page 64: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Benefícios:Benefícios:

– – Legibilidade;Legibilidade;

– – Construção de testes facilitada (mocks);Construção de testes facilitada (mocks);

– – Mais fácil para depurar;Mais fácil para depurar;

Regra Regra #4#4Somente um ponto (“arrow” para o PHP) por linhaSomente um ponto (“arrow” para o PHP) por linha

* cadeia getter ou uma interface fluente* cadeia getter ou uma interface fluente

Page 65: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 5# 5""Do notDo not Abbreviate" Abbreviate"

Page 66: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 5# 5""NãoNão abreviar" abreviar"

Page 67: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Page 68: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Page 69: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Por que você abrevia?Por que você abrevia?

Page 70: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

– – Preguiça de escrever o Preguiça de escrever o mesmo nome várias mesmo nome várias

vezes...vezes...• • Talvez isso indique Talvez isso indique

duplicidade de código!duplicidade de código!

Page 71: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

- Preguiça de escrever o - Preguiça de escrever o nome do método muito nome do método muito

longo...longo...• • Talvez isso indique que o Talvez isso indique que o

seu método faz mais de uma seu método faz mais de uma coisa. Isso deve ser separado coisa. Isso deve ser separado

em vários métodos ou até em vários métodos ou até classes!classes!

Page 72: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Mais do que uma responsabilidade?Mais do que uma responsabilidade?

Page 73: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Mais do que uma responsabilidade?Mais do que uma responsabilidade?

começa a partir de onde?começa a partir de onde?

Page 74: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Mais do que uma responsabilidade?Mais do que uma responsabilidade?

começa a partir de onde?começa a partir de onde?

Use nomenclaturas mais claras:Use nomenclaturas mais claras:fetchPage()fetchPage()

downloadPage()downloadPage()

Page 75: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Mais do que uma responsabilidade?Mais do que uma responsabilidade?

começa a partir de onde?começa a partir de onde?

Use um dicionário:Use um dicionário:fork, create, begin, openfork, create, begin, open

Use nomes mais claras:Use nomes mais claras:fetchPage()fetchPage()

downloadPage()downloadPage()

Page 76: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Mais do que uma responsabilidade?Mais do que uma responsabilidade?

começa a partir de onde?começa a partir de onde?

Linha de tabela?Linha de tabela?

Use um dicionário:Use um dicionário:fork, create, begin, openfork, create, begin, open

Use nomes mais claras:Use nomes mais claras:fetchPage()fetchPage()

downloadPage()downloadPage()

Page 77: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Benefícios:Benefícios:

– – Comunicação mais clara;Comunicação mais clara;

– – Facilita a busca por problemas ocultos.Facilita a busca por problemas ocultos.

Regra Regra #5#5Não abreviarNão abreviar

Page 78: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 6# 6"Keep your classes"Keep your classes

smallsmall""

AdaptedAdapted

Page 79: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 6# 6"M"Mantenha suas classesantenha suas classes

pequenaspequenas""

AdaptedAdapted

Page 80: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Regra original:Regra original:– – 50 linhas por classe.50 linhas por classe.

Page 81: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

– – 200200 linhas por classe (para linhas por classe (para incluir os blocos de incluir os blocos de documentação);documentação);

– – 1010 metodos por metodos por classesclasses;;

– – 1515 classes por classes por pacote/namespace/pasta;pacote/namespace/pasta;– De – De 1515 a a 2020 linhas por método. linhas por método.

Page 82: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Benefícios:Benefícios:

– – Responsabilidade única;Responsabilidade única;

– – Métodos objetivos;Métodos objetivos;

– – Pacotes/namespaces mais enxutos;Pacotes/namespaces mais enxutos;

Regra Regra #6#6Não abreviarNão abreviar

Page 83: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 7# 7""Limit Limit the number ofthe number of

instance variables in ainstance variables in aclass (2 to 5)class (2 to 5)""

AdaptedAdapted

Page 84: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 7# 7""Limite Limite o número das o número das variáveis de instânciavariáveis de instância

(máximo 5 )(máximo 5 )""

AdaptadaAdaptada

Page 85: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

AdaptedAdapted

Limitar em 5Limitar em 5

Page 86: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Benefícios:Benefícios:

– – Lista reduzida de dependências;Lista reduzida de dependências;

– – Mais fácil para fazer Mocking para testes.Mais fácil para fazer Mocking para testes.

Regra Regra #7#7Limite o número das variáveis de instânciaLimite o número das variáveis de instância (2 para 5 ) (2 para 5 )

Page 87: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 8# 8""Use first classUse first class

collectionscollections""

Page 88: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 8# 8"Use "Use coleçõescoleções de primeiro de primeiro

nível"nível"

Page 89: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Doctrine:Doctrine:ArrayCollectionArrayCollection

Page 90: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

• • Qualquer classe que contenha uma Qualquer classe que contenha uma coleção (ou tenha esse propósito), não coleção (ou tenha esse propósito), não deve conter outras propriedades;deve conter outras propriedades;

• • Encapsulamento de coleções primitivas Encapsulamento de coleções primitivas (arrays);(arrays);

• • Utilização de Interfaces Orientadas a Utilização de Interfaces Orientadas a Objetos:Objetos:

– – Collections do Java;Collections do Java;– SPL do PHP.– SPL do PHP.

Page 91: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Benefícios:Benefícios:

– – É possível implementar operações em coleções;É possível implementar operações em coleções;

– – Utilizar métodos já existentes em interfaces Utilizar métodos já existentes em interfaces pré-definidas.pré-definidas.

Regra Regra #8#8Use Use coleçõescoleções de primeiro nível de primeiro nível

Page 92: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 9# 9""Do notDo not use getters/use getters/

setterssetters""

* Use them if you code * Use them if you code PHPPHP

AdaptedAdapted

Page 93: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 9# 9""NãoNão use métodos use métodos

getter/settergetter/setter""

* Use para propriedades * Use para propriedades no código PHPno código PHP

AdaptadaAdaptada

Page 94: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Page 95: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

● Muitos frameworks utilizam os Muitos frameworks utilizam os métodos getters e setters paramétodos getters e setters para

inicializar variáveis, reduzindo inicializar variáveis, reduzindo código e evitando erros código e evitando erros desnecessários.desnecessários.

● Não coloque nenhum tipo de regra Não coloque nenhum tipo de regra de negócio nos getters ede negócio nos getters e

setters.setters.

Page 96: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Benefícios:Benefícios:

– – Operações de injetor ;Operações de injetor ;

– – Encapsulamento das transformaçõesEncapsulamento das transformações

Regra Regra #9#9NãoNão use métodos getter/setter use métodos getter/setter

* Use para propriedades no código PHP* Use para propriedades no código PHP

Page 97: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 10 # 10 (bonus!)(bonus!)""DocumentDocument your code! your code!""

CreatedCreated

Page 98: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

OC OC # 10 # 10 (bonus!)(bonus!)""DocumenteDocumente seu código seu código!!""

CreatedCreated

Page 99: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Marca Marca todotodo para que não para que não se perca nas mudanças se perca nas mudanças

Uma nota sobre o custoUma nota sobre o custo de execução da função de execução da função

Documentação gerada pelaDocumentação gerada pelaAPI do phpDocumentorAPI do phpDocumentor

Page 100: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Benefícios:Benefícios:

– – Documentação automática por API;Documentação automática por API;

– – Transmissão de "linha de pensamento";Transmissão de "linha de pensamento";

– – Evita confusões.Evita confusões.

Regra Regra #10 #10 (bonus!)(bonus!)Documente seu códigoDocumente seu código!!

Page 101: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

#1. Somente #1. Somente um nível de indentaçãoum nível de indentação por método; por método;

#2. #2. NãoNão utilize a palavra-chave utilize a palavra-chave 'eles''eles';;

#3. Encapsule os tipos primitivos e strings;#3. Encapsule os tipos primitivos e strings;

#4. Somente #4. Somente um ponto por linhaum ponto por linha;;

#5. #5. NãoNão abreviar; abreviar;

#6. Mantenha suas classes #6. Mantenha suas classes pequenaspequenas

#7. #7. LimiteLimite número das número das variáveis de instânciavariáveis de instância (máximo 5); (máximo 5);

#8. Use #8. Use coleçõescoleções de primeiro nível; de primeiro nível;

#9. Use métodos #9. Use métodos getter/settergetter/setter;;

#10. #10. DocumenteDocumente seu código. seu código.

Recaptulando:Recaptulando:

Page 102: Your code sucks, let's fix it! Objects Calisthenics

Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics

Perguntas?Perguntas?

Marcelo SiqueiraMarcelo [email protected]@marcelosiqueira.com.br

@marcelosiqueira@marcelosiqueira

Obrigado!Obrigado!