Your code sucks, let's fix it! Objects Calisthenics
-
Upload
marcelo-siqueira -
Category
Technology
-
view
448 -
download
0
description
Transcript of 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
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!
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;
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.
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
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
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?
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?
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?
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
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
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
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?
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Suck code!Suck code!
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Como melhorar isso?Como melhorar isso?
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Object Object CalisthenicsCalisthenics
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"
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.
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
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
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
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.
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
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""
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""
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".
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
00
11
2233
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
00
11
2233
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects 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
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
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
00
1122
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
00
1122
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
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
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.
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Podemos melhorar!Podemos melhorar!
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
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
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
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
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"
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'""
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects 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
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
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'
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
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
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Operaćão incorretaOperaćão incorreta
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Operaćão incorretaOperaćão incorreta
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
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
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
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
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
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Interface fluenteInterface fluente
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Interface fluenteInterface fluente
Operadores alinhadosOperadores alinhados
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
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
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"
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"
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects 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?
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!
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!
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?
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?
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()
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()
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()
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
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
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
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.
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.
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
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
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
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
AdaptedAdapted
Limitar em 5Limitar em 5
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 )
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""
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"
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects Calisthenics
Doctrine:Doctrine:ArrayCollectionArrayCollection
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.
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
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
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
Your code sucks, Your code sucks, let’s fix it! let’s fix it! Objects CalisthenicsObjects 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.
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
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
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
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
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!!
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:
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!