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

Marcelo Siqueira

@marcelosiqueira

Programador PHP/Python,
Defensor de Software
Livre e GNU/Linux, Nerd e
Empreendedor!
Your code sucks, let’s fix it!
Objects Calisthenics

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

Alguns dados sobre o grupo:
-mais de 600 membros na lista de discussão Google
Groups;
-mais de 400 pessoas cutiram fan-page do grupo;
-mais de 100 membros no grupo do Facebook;
Your code sucks, let’s fix it!
Objects Calisthenics

Essa palestra foi baseado
nas palestras.
Your code sucks, let’s fix it!
Objects Calisthenics

Guilherme Blanco
@guilhermeblanco

Object Calisthenics aplicado ao PHP

Essa palestra foi baseado
nas palestras.
Your code sucks, let’s fix it!
Objects Calisthenics

Guilherme Blanco
@guilhermeblanco

Object Calisthenics aplicado ao PHP

Essa palestra foi baseado
nas palestras.
Rafael Dohms
@rdohms

Object Calisthenics aplicado ao PHP
Your code sucks, let’s fix it!
Objects Calisthenics

Why does my code suck?
Your code sucks, let’s fix it!
Objects Calisthenics

Por que meu código é
ruim?
Your code sucks, let’s fix it!
Objects Calisthenics

É legível?

Por que meu código é
ruim?
Your code sucks, let’s fix it!
Objects Calisthenics

É legível?

Por que meu código é
ruim?
É testável
Your code sucks, let’s fix it!
Objects Calisthenics

É fácil a manutenção?

É legível?

Por que meu código é
ruim?
É testável
Your code sucks, let’s fix it!
Objects Calisthenics

É fácil a manutenção?

É legível?

Por que meu código é
ruim?
É reusável

É testável
Your code sucks, let’s fix it!
Objects Calisthenics

O que acham disso?
Your code sucks, let’s fix it!
Objects Calisthenics

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

Como melhorar isso?
Your code sucks, let’s fix it!
Objects Calisthenics

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

cal·is·then·ics - substantivo - /ˌkaləsˈTHeniks/
Termo derivado do grego: "exercício",
"exercício de relaxamento", "ginástica rítmica"

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

cal·is·then·ics - substantivo - /ˌkaləsˈTHeniks/
Termo derivado do grego: "exercício",
"exercício de relaxamento", "ginástica rítmica"

Object Calisthenics
Uma variedade de exercícios simples e
rítmicos para alcançar melhor qualidade
de código e OO.
Your code sucks, let’s fix it!
Objects Calisthenics

“So here’s an exercise that
can help you to internalize
principles of good
object-oriented design and
actually use them in real life.”

--Jeff Bay
Your code sucks, let’s fix it!
Objects Calisthenics

“Então aqui está um exercício
que pode ajudá-lo a
internalizar princípios de um
bom design orientado a
objeto e, na verdade, usá-las
na vida real.”

--Jeff Bay
Your code sucks, let’s fix it!
Objects Calisthenics

“Então aqui está um exercício
que pode ajudá-lo a
Importante:
internalizar princípios de um
bom design
PHP != JAVA orientado a
Algumas adaptações devem ser feitas
objeto e, na verdade, usá-las
na vida real.”

--Jeff Bay
Your code sucks, let’s fix it!
Objects Calisthenics

Regras:
Nove (9) orientações "bem" simples
e que podem ser utilizadas em
qualquer linguagem orientada a
objetos.
Your code sucks, let’s fix it!
Objects Calisthenics

Regras:

Repetindo:

Nove (9) orientações "bem" simples
PHP é !=
e que podem adaptações devem ser feitasem
Algumas ser utilizadas
qualquer linguagem orientada a
objetos.
Your code sucks, let’s fix it!
Objects Calisthenics

OC # 1
"Only one indentation
level per method"
method"
Your code sucks, let’s fix it!
Objects Calisthenics

OC # 1
"Somente um nível de
indentação por método"
método"
Your code sucks, let’s fix it!
Objects Calisthenics

OC # 1
"Somente um nível de
indentação por método"
método"
Neologismo derivado da palavra inglesa
"indentation", que significa "recuo".
Your code sucks, let’s fix it!
Objects Calisthenics
Your code sucks, let’s fix it!
Objects Calisthenics

0
1
2

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

0
1
2

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

Espaço em branco
Your code sucks, let’s fix it!
Objects Calisthenics

Espaço em branco

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

0
1

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

0
1

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

IF de uma linha, operação simples
Your code sucks, let’s fix it!
Objects Calisthenics

Return rápido

IF de uma linha, operação simples
Your code sucks, let’s fix it!
Objects Calisthenics

Return rápido

IF de uma linha, operação simples

Função nativa C, mais rápida.
Your code sucks, let’s fix it!
Objects Calisthenics

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

Interação rápida

Método reusável
Your code sucks, let’s fix it!
Objects Calisthenics

Interação rápida

Método reusável

Método matches, resultado “true”
Your code sucks, let’s fix it!
Objects Calisthenics

Interação rápida

Método reusável

Retorno aceitável: expectativa/retorno

Método matches, resultado “true”
Your code sucks, let’s fix it!
Objects Calisthenics

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

Benefícios:
– Maior coesão;
– Reduz a complexidade ciclomática;
– Métodos acabam fazendo apenas uma coisa,
como deve ser;
– Aumenta a reusabilidade.
Your code sucks, let’s fix it!
Objects Calisthenics

OC # 2
"Do not use the 'else'
keyword"
Your code sucks, let’s fix it!
Objects Calisthenics

OC # 2
"Não utilize a
palavra-chave 'else'"
'else'"
Your code sucks, let’s fix it!
Objects Calisthenics
Your code sucks, let’s fix it!
Objects Calisthenics
Your code sucks, let’s fix it!
Objects Calisthenics

Variável intermediária

Variável intermediária
Your code sucks, let’s fix it!
Objects Calisthenics

Intermediária removida

Retorno rápido
Your code sucks, let’s fix it!
Objects Calisthenics

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

Benefícios:
– Ajuda a prevenir duplicação de código;
– Reduz a complexidade ciclomática;
– Faz o código ficar mais limpo, passando por um
único caminho.
Your code sucks, let’s fix it!
Objects Calisthenics

Adapted

OC # 3
"Wrap primitive types
and strings"
* if there is behavior
Your code sucks, let’s fix it!
Objects Calisthenics

Adaptada

OC # 3
"Encapsule os tipos
primitivos e strings"
* se eles possuírem
comportamento
Your code sucks, let’s fix it!
Objects Calisthenics
Your code sucks, let’s fix it!
Objects Calisthenics

Operaćão incorreta
Your code sucks, let’s fix it!
Objects Calisthenics

Operaćão incorreta
Your code sucks, let’s fix it!
Objects Calisthenics

Agora pode encapsular todas as
operações relacionadas com a animação
Your code sucks, let’s fix it!
Objects Calisthenics

Regra #2
Encapsule os tipos primitivos e strings
* se eles possuírem comportamento

Benefícios:
– Ajuda a identificar o que deve ser um objeto;
– Indução de Tipo;
– Encapsulamento de operações.
Your code sucks, let’s fix it!
Objects Calisthenics

Adapted

OC # 4
"Only one -> per line"
* getter chain or a fluent
interface
Your code sucks, let’s fix it!
Objects Calisthenics

Adaptada

OC # 4
"Somente um ponto
(“arrow” para o PHP) por
linha"
* cadeia getter ou uma
interface fluente
Your code sucks, let’s fix it!
Objects Calisthenics

propriedades são mais difíceis de testar

Sem espaço em branco
Your code sucks, let’s fix it!
Objects Calisthenics
Your code sucks, let’s fix it!
Objects Calisthenics

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

Interface fluente

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

Interface fluente

Operadores alinhados

Somente geters (nenhuma operação)
Your code sucks, let’s fix it!
Objects Calisthenics

Regra #4
Somente um ponto (“arrow” para o PHP) por linha
* cadeia getter ou uma interface fluente

Benefícios:
– Legibilidade;
– Construção de testes facilitada (mocks);
– Mais fácil para depurar;
Your code sucks, let’s fix it!
Objects Calisthenics

OC # 5
"Do not Abbreviate"
Your code sucks, let’s fix it!
Objects Calisthenics

OC # 5
"Não abreviar"
Your code sucks, let’s fix it!
Objects Calisthenics
Your code sucks, let’s fix it!
Objects Calisthenics
Your code sucks, let’s fix it!
Objects Calisthenics

Por que você abrevia?
Your code sucks, let’s fix it!
Objects Calisthenics

– Preguiça de escrever o
mesmo nome várias
vezes...
• Talvez isso indique
duplicidade de código!
Your code sucks, let’s fix it!
Objects Calisthenics

- Preguiça de escrever o
nome do método muito
longo...
• Talvez isso indique que o
seu método faz mais de uma
coisa. Isso deve ser separado
em vários métodos ou até
classes!
Your code sucks, let’s fix it!
Objects Calisthenics

Mais do que uma responsabilidade?
Your code sucks, let’s fix it!
Objects Calisthenics

Mais do que uma responsabilidade?

começa a partir de onde?
Your code sucks, let’s fix it!
Objects Calisthenics

Mais do que uma responsabilidade?

começa a partir de onde?

Use nomenclaturas mais claras:
fetchPage()
downloadPage()
Your code sucks, let’s fix it!
Objects Calisthenics

Mais do que uma responsabilidade?

começa a partir de onde?

Use nomes mais claras:
fetchPage()
downloadPage()

Use um dicionário:
fork, create, begin, open
Your code sucks, let’s fix it!
Objects Calisthenics

Mais do que uma responsabilidade?

começa a partir de onde?

Use nomes mais claras:
fetchPage()
downloadPage()

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

Linha de tabela?
Your code sucks, let’s fix it!
Objects Calisthenics

Regra #5
Não abreviar

Benefícios:
– Comunicação mais clara;
– Facilita a busca por problemas ocultos.
Your code sucks, let’s fix it!
Objects Calisthenics

Adapted

OC # 6
"Keep your classes
small"
small"
Your code sucks, let’s fix it!
Objects Calisthenics

Adapted

OC # 6
"Mantenha suas classes
"Mantenha
pequenas"
pequenas"
Your code sucks, let’s fix it!
Objects Calisthenics

Regra original:
– 50 linhas por classe.
Your code sucks, let’s fix it!
Objects Calisthenics

– 200 linhas por classe (para
incluir os blocos de
documentação);
– 10 metodos por classes;
classes;
– 15 classes por
pacote/namespace/pasta;
– De 15 a 20 linhas por método.
Your code sucks, let’s fix it!
Objects Calisthenics

Regra #6
Não abreviar

Benefícios:
– Responsabilidade única;
– Métodos objetivos;
– Pacotes/namespaces mais enxutos;
Your code sucks, let’s fix it!
Objects Calisthenics

Adapted

OC # 7
"Limit the number of
instance variables in a
class (2 to 5)"
5)"
Your code sucks, let’s fix it!
Objects Calisthenics

Adaptada

OC # 7
"Limite o número das
variáveis de instância
(máximo 5 )"
)"
Your code sucks, let’s fix it!
Objects Calisthenics

Adapted

Limitar em 5
Your code sucks, let’s fix it!
Objects Calisthenics

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

Benefícios:
– Lista reduzida de dependências;
– Mais fácil para fazer Mocking para testes.
Your code sucks, let’s fix it!
Objects Calisthenics

OC # 8
"Use first class
collections"
collections"
Your code sucks, let’s fix it!
Objects Calisthenics

OC # 8
"Use coleções de primeiro
nível"
Your code sucks, let’s fix it!
Objects Calisthenics

Doctrine:
ArrayCollection
Your code sucks, let’s fix it!
Objects Calisthenics

• Qualquer classe que contenha uma
coleção (ou tenha esse propósito), não
deve conter outras propriedades;
• Encapsulamento de coleções primitivas
(arrays);
• Utilização de Interfaces Orientadas a
Objetos:
– Collections do Java;
– SPL do PHP.
Your code sucks, let’s fix it!
Objects Calisthenics

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

Benefícios:
– É possível implementar operações em coleções;
– Utilizar métodos já existentes em interfaces
pré-definidas.
Your code sucks, let’s fix it!
Objects Calisthenics

Adapted

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

* Use them if you code
PHP
Your code sucks, let’s fix it!
Objects Calisthenics

Adaptada

OC # 9
"Não use métodos
getter/setter"
getter/setter"

* Use para propriedades
no código PHP
Your code sucks, let’s fix it!
Objects Calisthenics
Your code sucks, let’s fix it!
Objects Calisthenics
●

●

Muitos frameworks utilizam os
métodos getters e setters para
inicializar variáveis, reduzindo
código e evitando erros
desnecessários.
Não coloque nenhum tipo de regra
de negócio nos getters e
setters.
Your code sucks, let’s fix it!
Objects Calisthenics

Regra #9
Não use métodos getter/setter
* Use para propriedades no código PHP

Benefícios:
– Operações de injetor ;
– Encapsulamento das transformações
Your code sucks, let’s fix it!
Objects Calisthenics

Created

OC # 10 (bonus!)
"Document your code!"
code!"
Your code sucks, let’s fix it!
Objects Calisthenics

Created

OC # 10 (bonus!)
"Documente seu código!"
código!
Your code sucks, let’s fix it!
Objects Calisthenics

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

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

Documentação gerada pela
API do phpDocumentor
Your code sucks, let’s fix it!
Objects Calisthenics

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

Benefícios:
– Documentação automática por API;
– Transmissão de "linha de pensamento";
– Evita confusões.
Your code sucks, let’s fix it!
Objects Calisthenics

Recaptulando:
#1. Somente um nível de indentação por método;
#2. Não utilize a palavra-chave 'eles';
'eles';
#3. Encapsule os tipos primitivos e strings;
#4. Somente um ponto por linha;
linha;
#5. Não abreviar;
#6. Mantenha suas classes pequenas
#7. Limite número das variáveis de instância (máximo 5);
#8. Use coleções de primeiro nível;
#9. Use métodos getter/setter;
getter/setter;
#10. Documente seu código.
Your code sucks, let’s fix it!
Objects Calisthenics

Perguntas?
Marcelo Siqueira
eu@marcelosiqueira.com.br
@marcelosiqueira

Obrigado!

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

  • 1.
    Your code sucks, let’sfix it! Objects Calisthenics Marcelo Siqueira @marcelosiqueira
  • 2.
    Your code sucks,let’s fix it! Objects Calisthenics Marcelo Siqueira @marcelosiqueira Programador PHP/Python, Defensor de Software Livre e GNU/Linux, Nerd e Empreendedor!
  • 3.
    Your code sucks,let’s fix it! Objects Calisthenics Grupo PHPMS O Grupo de Desenvolvedores PHP de Mato Grosso do Sul foi criado há 6 anos com objetivo de divulgar e incentivar a adoção da linguagem de programação PHP no desenvolvimento de software em Mato Grosso do Sul, além de capacitar os profissionais promovendo encontros, DOJOs, workshops, palestras e eventos em geral. Alguns dados sobre o grupo: -mais de 600 membros na lista de discussão Google Groups; -mais de 400 pessoas cutiram fan-page do grupo; -mais de 100 membros no grupo do Facebook;
  • 4.
    Your code sucks,let’s fix it! Objects Calisthenics Essa palestra foi baseado nas palestras.
  • 5.
    Your code sucks,let’s fix it! Objects Calisthenics Guilherme Blanco @guilhermeblanco Object Calisthenics aplicado ao PHP Essa palestra foi baseado nas palestras.
  • 6.
    Your code sucks,let’s fix it! Objects Calisthenics Guilherme Blanco @guilhermeblanco Object Calisthenics aplicado ao PHP Essa palestra foi baseado nas palestras. Rafael Dohms @rdohms Object Calisthenics aplicado ao PHP
  • 7.
    Your code sucks,let’s fix it! Objects Calisthenics Why does my code suck?
  • 8.
    Your code sucks,let’s fix it! Objects Calisthenics Por que meu código é ruim?
  • 9.
    Your code sucks,let’s fix it! Objects Calisthenics É legível? Por que meu código é ruim?
  • 10.
    Your code sucks,let’s fix it! Objects Calisthenics É legível? Por que meu código é ruim? É testável
  • 11.
    Your code sucks,let’s fix it! Objects Calisthenics É fácil a manutenção? É legível? Por que meu código é ruim? É testável
  • 12.
    Your code sucks,let’s fix it! Objects Calisthenics É fácil a manutenção? É legível? Por que meu código é ruim? É reusável É testável
  • 13.
    Your code sucks,let’s fix it! Objects Calisthenics O que acham disso?
  • 14.
    Your code sucks,let’s fix it! Objects Calisthenics Suck code!
  • 15.
    Your code sucks,let’s fix it! Objects Calisthenics Como melhorar isso?
  • 16.
    Your code sucks,let’s fix it! Objects Calisthenics Object Calisthenics
  • 17.
    Your code sucks,let’s fix it! Objects Calisthenics cal·is·then·ics - substantivo - /ˌkaləsˈTHeniks/ Termo derivado do grego: "exercício", "exercício de relaxamento", "ginástica rítmica" Object Calisthenics
  • 18.
    Your code sucks,let’s fix it! Objects Calisthenics cal·is·then·ics - substantivo - /ˌkaləsˈTHeniks/ Termo derivado do grego: "exercício", "exercício de relaxamento", "ginástica rítmica" Object Calisthenics Uma variedade de exercícios simples e rítmicos para alcançar melhor qualidade de código e OO.
  • 19.
    Your code sucks,let’s fix it! Objects Calisthenics “So here’s an exercise that can help you to internalize principles of good object-oriented design and actually use them in real life.” --Jeff Bay
  • 20.
    Your code sucks,let’s fix it! Objects Calisthenics “Então aqui está um exercício que pode ajudá-lo a internalizar princípios de um bom design orientado a objeto e, na verdade, usá-las na vida real.” --Jeff Bay
  • 21.
    Your code sucks,let’s fix it! Objects Calisthenics “Então aqui está um exercício que pode ajudá-lo a Importante: internalizar princípios de um bom design PHP != JAVA orientado a Algumas adaptações devem ser feitas objeto e, na verdade, usá-las na vida real.” --Jeff Bay
  • 22.
    Your code sucks,let’s fix it! Objects Calisthenics Regras: Nove (9) orientações "bem" simples e que podem ser utilizadas em qualquer linguagem orientada a objetos.
  • 23.
    Your code sucks,let’s fix it! Objects Calisthenics Regras: Repetindo: Nove (9) orientações "bem" simples PHP é != e que podem adaptações devem ser feitasem Algumas ser utilizadas qualquer linguagem orientada a objetos.
  • 24.
    Your code sucks,let’s fix it! Objects Calisthenics OC # 1 "Only one indentation level per method" method"
  • 25.
    Your code sucks,let’s fix it! Objects Calisthenics OC # 1 "Somente um nível de indentação por método" método"
  • 26.
    Your code sucks,let’s fix it! Objects Calisthenics OC # 1 "Somente um nível de indentação por método" método" Neologismo derivado da palavra inglesa "indentation", que significa "recuo".
  • 27.
    Your code sucks,let’s fix it! Objects Calisthenics
  • 28.
    Your code sucks,let’s fix it! Objects Calisthenics 0 1 2 3
  • 29.
    Your code sucks,let’s fix it! Objects Calisthenics 0 1 2 3
  • 30.
    Your code sucks,let’s fix it! Objects Calisthenics
  • 31.
    Your code sucks,let’s fix it! Objects Calisthenics Espaço em branco
  • 32.
    Your code sucks,let’s fix it! Objects Calisthenics Espaço em branco Logica duplicada
  • 33.
    Your code sucks,let’s fix it! Objects Calisthenics 0 1 2
  • 34.
    Your code sucks,let’s fix it! Objects Calisthenics 0 1 2
  • 35.
    Your code sucks,let’s fix it! Objects Calisthenics IF de uma linha, operação simples
  • 36.
    Your code sucks,let’s fix it! Objects Calisthenics Return rápido IF de uma linha, operação simples
  • 37.
    Your code sucks,let’s fix it! Objects Calisthenics Return rápido IF de uma linha, operação simples Função nativa C, mais rápida.
  • 38.
    Your code sucks,let’s fix it! Objects Calisthenics Podemos melhorar!
  • 39.
    Your code sucks,let’s fix it! Objects Calisthenics Interação rápida Método reusável
  • 40.
    Your code sucks,let’s fix it! Objects Calisthenics Interação rápida Método reusável Método matches, resultado “true”
  • 41.
    Your code sucks,let’s fix it! Objects Calisthenics Interação rápida Método reusável Retorno aceitável: expectativa/retorno Método matches, resultado “true”
  • 42.
    Your code sucks,let’s fix it! Objects Calisthenics Regra #1 Somente um nível de indentação/recuo por método Benefícios: – Maior coesão; – Reduz a complexidade ciclomática; – Métodos acabam fazendo apenas uma coisa, como deve ser; – Aumenta a reusabilidade.
  • 43.
    Your code sucks,let’s fix it! Objects Calisthenics OC # 2 "Do not use the 'else' keyword"
  • 44.
    Your code sucks,let’s fix it! Objects Calisthenics OC # 2 "Não utilize a palavra-chave 'else'" 'else'"
  • 45.
    Your code sucks,let’s fix it! Objects Calisthenics
  • 46.
    Your code sucks,let’s fix it! Objects Calisthenics
  • 47.
    Your code sucks,let’s fix it! Objects Calisthenics Variável intermediária Variável intermediária
  • 48.
    Your code sucks,let’s fix it! Objects Calisthenics Intermediária removida Retorno rápido
  • 49.
    Your code sucks,let’s fix it! Objects Calisthenics Regra #2 Não utilize a palavra-chave 'else' Benefícios: – Ajuda a prevenir duplicação de código; – Reduz a complexidade ciclomática; – Faz o código ficar mais limpo, passando por um único caminho.
  • 50.
    Your code sucks,let’s fix it! Objects Calisthenics Adapted OC # 3 "Wrap primitive types and strings" * if there is behavior
  • 51.
    Your code sucks,let’s fix it! Objects Calisthenics Adaptada OC # 3 "Encapsule os tipos primitivos e strings" * se eles possuírem comportamento
  • 52.
    Your code sucks,let’s fix it! Objects Calisthenics
  • 53.
    Your code sucks,let’s fix it! Objects Calisthenics Operaćão incorreta
  • 54.
    Your code sucks,let’s fix it! Objects Calisthenics Operaćão incorreta
  • 55.
    Your code sucks,let’s fix it! Objects Calisthenics Agora pode encapsular todas as operações relacionadas com a animação
  • 56.
    Your code sucks,let’s fix it! Objects Calisthenics Regra #2 Encapsule os tipos primitivos e strings * se eles possuírem comportamento Benefícios: – Ajuda a identificar o que deve ser um objeto; – Indução de Tipo; – Encapsulamento de operações.
  • 57.
    Your code sucks,let’s fix it! Objects Calisthenics Adapted OC # 4 "Only one -> per line" * getter chain or a fluent interface
  • 58.
    Your code sucks,let’s fix it! Objects Calisthenics Adaptada OC # 4 "Somente um ponto (“arrow” para o PHP) por linha" * cadeia getter ou uma interface fluente
  • 59.
    Your code sucks,let’s fix it! Objects Calisthenics propriedades são mais difíceis de testar Sem espaço em branco
  • 60.
    Your code sucks,let’s fix it! Objects Calisthenics
  • 61.
    Your code sucks,let’s fix it! Objects Calisthenics Interface fluente
  • 62.
    Your code sucks,let’s fix it! Objects Calisthenics Interface fluente Operadores alinhados
  • 63.
    Your code sucks,let’s fix it! Objects Calisthenics Interface fluente Operadores alinhados Somente geters (nenhuma operação)
  • 64.
    Your code sucks,let’s fix it! Objects Calisthenics Regra #4 Somente um ponto (“arrow” para o PHP) por linha * cadeia getter ou uma interface fluente Benefícios: – Legibilidade; – Construção de testes facilitada (mocks); – Mais fácil para depurar;
  • 65.
    Your code sucks,let’s fix it! Objects Calisthenics OC # 5 "Do not Abbreviate"
  • 66.
    Your code sucks,let’s fix it! Objects Calisthenics OC # 5 "Não abreviar"
  • 67.
    Your code sucks,let’s fix it! Objects Calisthenics
  • 68.
    Your code sucks,let’s fix it! Objects Calisthenics
  • 69.
    Your code sucks,let’s fix it! Objects Calisthenics Por que você abrevia?
  • 70.
    Your code sucks,let’s fix it! Objects Calisthenics – Preguiça de escrever o mesmo nome várias vezes... • Talvez isso indique duplicidade de código!
  • 71.
    Your code sucks,let’s fix it! Objects Calisthenics - Preguiça de escrever o nome do método muito longo... • Talvez isso indique que o seu método faz mais de uma coisa. Isso deve ser separado em vários métodos ou até classes!
  • 72.
    Your code sucks,let’s fix it! Objects Calisthenics Mais do que uma responsabilidade?
  • 73.
    Your code sucks,let’s fix it! Objects Calisthenics Mais do que uma responsabilidade? começa a partir de onde?
  • 74.
    Your code sucks,let’s fix it! Objects Calisthenics Mais do que uma responsabilidade? começa a partir de onde? Use nomenclaturas mais claras: fetchPage() downloadPage()
  • 75.
    Your code sucks,let’s fix it! Objects Calisthenics Mais do que uma responsabilidade? começa a partir de onde? Use nomes mais claras: fetchPage() downloadPage() Use um dicionário: fork, create, begin, open
  • 76.
    Your code sucks,let’s fix it! Objects Calisthenics Mais do que uma responsabilidade? começa a partir de onde? Use nomes mais claras: fetchPage() downloadPage() Use um dicionário: fork, create, begin, open Linha de tabela?
  • 77.
    Your code sucks,let’s fix it! Objects Calisthenics Regra #5 Não abreviar Benefícios: – Comunicação mais clara; – Facilita a busca por problemas ocultos.
  • 78.
    Your code sucks,let’s fix it! Objects Calisthenics Adapted OC # 6 "Keep your classes small" small"
  • 79.
    Your code sucks,let’s fix it! Objects Calisthenics Adapted OC # 6 "Mantenha suas classes "Mantenha pequenas" pequenas"
  • 80.
    Your code sucks,let’s fix it! Objects Calisthenics Regra original: – 50 linhas por classe.
  • 81.
    Your code sucks,let’s fix it! Objects Calisthenics – 200 linhas por classe (para incluir os blocos de documentação); – 10 metodos por classes; classes; – 15 classes por pacote/namespace/pasta; – De 15 a 20 linhas por método.
  • 82.
    Your code sucks,let’s fix it! Objects Calisthenics Regra #6 Não abreviar Benefícios: – Responsabilidade única; – Métodos objetivos; – Pacotes/namespaces mais enxutos;
  • 83.
    Your code sucks,let’s fix it! Objects Calisthenics Adapted OC # 7 "Limit the number of instance variables in a class (2 to 5)" 5)"
  • 84.
    Your code sucks,let’s fix it! Objects Calisthenics Adaptada OC # 7 "Limite o número das variáveis de instância (máximo 5 )" )"
  • 85.
    Your code sucks,let’s fix it! Objects Calisthenics Adapted Limitar em 5
  • 86.
    Your code sucks,let’s fix it! Objects Calisthenics Regra #7 Limite o número das variáveis de instância (2 para 5 ) Benefícios: – Lista reduzida de dependências; – Mais fácil para fazer Mocking para testes.
  • 87.
    Your code sucks,let’s fix it! Objects Calisthenics OC # 8 "Use first class collections" collections"
  • 88.
    Your code sucks,let’s fix it! Objects Calisthenics OC # 8 "Use coleções de primeiro nível"
  • 89.
    Your code sucks,let’s fix it! Objects Calisthenics Doctrine: ArrayCollection
  • 90.
    Your code sucks,let’s fix it! Objects Calisthenics • Qualquer classe que contenha uma coleção (ou tenha esse propósito), não deve conter outras propriedades; • Encapsulamento de coleções primitivas (arrays); • Utilização de Interfaces Orientadas a Objetos: – Collections do Java; – SPL do PHP.
  • 91.
    Your code sucks,let’s fix it! Objects Calisthenics Regra #8 Use coleções de primeiro nível Benefícios: – É possível implementar operações em coleções; – Utilizar métodos já existentes em interfaces pré-definidas.
  • 92.
    Your code sucks,let’s fix it! Objects Calisthenics Adapted OC # 9 "Do not use getters/ setters" setters" * Use them if you code PHP
  • 93.
    Your code sucks,let’s fix it! Objects Calisthenics Adaptada OC # 9 "Não use métodos getter/setter" getter/setter" * Use para propriedades no código PHP
  • 94.
    Your code sucks,let’s fix it! Objects Calisthenics
  • 95.
    Your code sucks,let’s fix it! Objects Calisthenics ● ● Muitos frameworks utilizam os métodos getters e setters para inicializar variáveis, reduzindo código e evitando erros desnecessários. Não coloque nenhum tipo de regra de negócio nos getters e setters.
  • 96.
    Your code sucks,let’s fix it! Objects Calisthenics Regra #9 Não use métodos getter/setter * Use para propriedades no código PHP Benefícios: – Operações de injetor ; – Encapsulamento das transformações
  • 97.
    Your code sucks,let’s fix it! Objects Calisthenics Created OC # 10 (bonus!) "Document your code!" code!"
  • 98.
    Your code sucks,let’s fix it! Objects Calisthenics Created OC # 10 (bonus!) "Documente seu código!" código!
  • 99.
    Your code sucks,let’s fix it! Objects Calisthenics Uma nota sobre o custo de execução da função Marca todo para que não se perca nas mudanças Documentação gerada pela API do phpDocumentor
  • 100.
    Your code sucks,let’s fix it! Objects Calisthenics Regra #10 (bonus!) Documente seu código! código! Benefícios: – Documentação automática por API; – Transmissão de "linha de pensamento"; – Evita confusões.
  • 101.
    Your code sucks,let’s fix it! Objects Calisthenics Recaptulando: #1. Somente um nível de indentação por método; #2. Não utilize a palavra-chave 'eles'; 'eles'; #3. Encapsule os tipos primitivos e strings; #4. Somente um ponto por linha; linha; #5. Não abreviar; #6. Mantenha suas classes pequenas #7. Limite número das variáveis de instância (máximo 5); #8. Use coleções de primeiro nível; #9. Use métodos getter/setter; getter/setter; #10. Documente seu código.
  • 102.
    Your code sucks,let’s fix it! Objects Calisthenics Perguntas? Marcelo Siqueira eu@marcelosiqueira.com.br @marcelosiqueira Obrigado!