SlideShare uma empresa Scribd logo
1 de 68
Baixar para ler offline
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

Mais conteúdo relacionado

Semelhante a Object Calisthenics: 9 regras para lapidar código Ruby

Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoBonoBee
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareGabriel Felipe Soares
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atechcesarcneto
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisRogerio Fontes
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In TubaRafael Paz
 
Padrões Web & Code Standard
Padrões Web & Code StandardPadrões Web & Code Standard
Padrões Web & Code StandardToni Albuquerque
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"thiagobapt
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Thiago Dieb
 

Semelhante a Object Calisthenics: 9 regras para lapidar código Ruby (20)

Object calisthenics
Object calisthenicsObject calisthenics
Object calisthenics
 
Objects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do códigoObjects calisthenics - Os 10 mandamentos do rei do código
Objects calisthenics - Os 10 mandamentos do rei do código
 
Growing oos guided_by_tests entire
Growing oos guided_by_tests entireGrowing oos guided_by_tests entire
Growing oos guided_by_tests entire
 
Clean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de SoftwareClean code - Qualidade em desenvolvimento de Software
Clean code - Qualidade em desenvolvimento de Software
 
Lapidando ruby
Lapidando rubyLapidando ruby
Lapidando ruby
 
Clean Code
Clean CodeClean Code
Clean Code
 
Treinamento TDD - Atech
Treinamento TDD - AtechTreinamento TDD - Atech
Treinamento TDD - Atech
 
Código limpo
Código limpoCódigo limpo
Código limpo
 
Test First, TDD e outros Bichos
Test First, TDD e outros BichosTest First, TDD e outros Bichos
Test First, TDD e outros Bichos
 
Clean code
Clean codeClean code
Clean code
 
Clean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everisClean code @rogeriofontes-techfriday-everis
Clean code @rogeriofontes-techfriday-everis
 
Clean Code - Fork In Tuba
Clean Code - Fork In TubaClean Code - Fork In Tuba
Clean Code - Fork In Tuba
 
Codigo limpo
Codigo limpoCodigo limpo
Codigo limpo
 
Padrões Web & Code Standard
Padrões Web & Code StandardPadrões Web & Code Standard
Padrões Web & Code Standard
 
TDD para "meros mortais"
TDD para "meros mortais"TDD para "meros mortais"
TDD para "meros mortais"
 
Código limpo php
Código limpo phpCódigo limpo php
Código limpo php
 
Clean Code na prática
Clean Code na práticaClean Code na prática
Clean Code na prática
 
Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0Minicurso de Lógica e Linguagem Java 6.0
Minicurso de Lógica e Linguagem Java 6.0
 
Clean code v3
Clean code v3Clean code v3
Clean code v3
 
Minicurso de TDD
Minicurso de TDDMinicurso de TDD
Minicurso de TDD
 

Object Calisthenics: 9 regras para lapidar código Ruby