Lapidando código ruby com
Object Calisthenics
Carlos Eduardo (kadu)
/thekaduu /ikaduu
nosso propósito é criar as melhores
experiências em serviços médicosnosso propósito é criar as melhores
experiências em serviços médicos
● difícil manutenção
● custo nova funcionalidade
● estresse
“Você se torna eternamente responsável
Carlos Eduardo (Kadu) :)
pelo código que escreve”
código limpo
mas afinal o que é isso?
“Clean code is simple and direct. Clean code
reads like well-written prose. Clean code never
obscures the designer’s intent but rather is full
of crisp abstractions and straightforward lines
of control.”
Grady Booch
clean code handbook of agile software craftsmanship
● legibilidade
● alta coesão
● baixo acoplamento
● testabilidade
como implementar isso tudo?
Dont
Repeat
Yourself
● legibilidade
● alta coesão
● baixo acoplamento
● fácil de testar
Object Calisthenics
“A palavra calisthenics vem das antigas palavras
gregas kallos (κάλλος), que significa “belo“ e
sthenos (σθένος), que significa “força”.
Wikipedia
https://en.wikipedia.org/wiki/Calisthenics
Exercícios!
Esse conceito foi criado pelo
Jeff Bay no livro
The ThoughtWorks Anthology
“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
The ThoughtWorks Anthology
Object Calisthenics
é um conjunto de 9 regras exercícios, que ajudam a lapidar seu código
Object Calisthenics #1
“somente um nível de indentação
por método”
1
2
Extract Method
● Single Responsibility Principle (S do SOLID)
● Extract Method
● Reuso
● Legibilidade
● Manutenabilidade
Resumo:
Object Calisthenics #2
“não use o keyword ‘ELSE’”
Vai aplicar o desconto
Vai aplicar o desconto
● evita a duplicação de código DRY
● legibilidade
● reduz a complexidade ciclomática
Resumo:
Em casos complexo, padrões como State,
Null Object e Strategy podem ser úteis
Object Calisthenics #3
“encapsule todos os tipos primitivos
e strings”
(às vezes)
Se uma variável de tipo primitivo tiver
comportamento, deve ser encapsulada
validar período
efetuar reservar
● evita a duplicação de código DRY
● Single Responsibility Principle (S do SOLID)
● valida o estado na criação do objeto
● encoraja composição
Resumo:
Martin Fowler apresenta este conceito como
Value Object.
Object Calisthenics #4
“coleções de primeira classe”
manipulação de array
manipulação de array
lógica de negócio
● Single Responsibility Principle (S do SOLID)
● Open Closed Principle (O do SOLID)
● reuso
● testabilidade
Resumo:
Object Calisthenics #5
“um ponto por linha”
Exceto Fluent Interfaces e Method chaining
The Law of Demeter (LoD)
“Only talk to your friends”
LoD violada
● legibilidade
● facilidade para testar (mocks)
● The Law of Demeter
● reduz o acoplamento
● coesão
Resumo:
Object Calisthenics #6
“não abreviar o código”
Defina nomes que expressem o que realmente o
método faz (mesmo que possa parecer ridículo)
● comunicação mais clara
● manutenabilidade
● Ubiquitous Language (Eric Evans)
Resumo:
Quando for dar nome a método/variável,
caso você pense em utilizar “e” (and), seu
método pode está fazendo mais coisas do
que deveria.
Object Calisthenics #7
“mantenha as classes pequenas”
A regra original diz que uma classe deve
ter no máximo 50 linhas e um módulo no
máximo 10 arquivos
● Single Responsibility Principle (S do SOLID)
● clareza nos métodos
● evitar God Class anti-pattern
Resumo:
Object Calisthenics #8
“não crie classes com mais de duas
variáveis de instância”
A regra original diz duas variáveis por
instância, mas para não sermos extremistas,
podemos usar até cinco 😄
● Single Responsibility Principle (S do SOLID)
● lista de dependências curta
● facilidade ao testar (mocks)
Resumo:
Object Calisthenics #9
“não use getter and setters”
gettters quantity e price
setter status
“Tell, don’t ask”
● Information Expert (GRASP)
● foco no comportamento ao invés de dados
● encapsulamento
Resumo:
#1 somente um nível de indentação por método
#2 não use o keyword “else”
#3 encapsule os tipos primitivos e strings
#4 coleções de primeira classe
#5 um ponto por linha
#6 não abrevie seu código
#7 mantenha as classes pequenas
#8 não crie classes com mais de duas variáveis de instância
#9 não use getters and setters
Recapitulando
https://www.cs.helsinki.fi/u/luontola/tdd-2009/ext/ObjectCalisthenics.pdf
https://www.infoq.com/br/presentations/codigo-limpo-e-object-calisthenics/
https://pt.slideshare.net/FerdinandoSantacroce/object-calisthenics-87601779
http://talks.jessedobbelae.re/object-calisthenics/
https://pt.slideshare.net/guilhermeblanco/php-para-adultos-clean-code-e-obj
ect-calisthenics
https://martinfowler.com/bliki/ValueObject.html
Links
Leitura

Lapidando código ruby com Object Calisthenics