Object Calisthenics
- Object Calisthenics
"Object Calisthenics" é um conjunto de boas práticas de programação orientada a objetos, criado por Jeff Bay. A ideia principal é melhorar a qualidade do código — especialmente sua manutenibilidade, leitura e testabilidade — através de restrições deliberadas no modo como o código é escrito.
O termo "calisthenics" (calistenia) vem da ideia de exercícios repetitivos para ganhar força e disciplina, e o mesmo se aplica ao código: você segue essas regras para treinar sua mente a escrever código limpo.
As 9 regras do Object Calisthenics
-
Um nível de indentação por método
- Evita estruturas de controle aninhadas. Use early return, por exemplo.
-
Não use a palavra-chave
else- Estimula código mais direto e claro. Use retornos antecipados ao invés de
else.
- Estimula código mais direto e claro. Use retornos antecipados ao invés de
-
Envie apenas um objeto por vez para um método
- Promove baixo acoplamento e alta coesão.
-
Primeiras classes, tipos primitivos por último
- Evite usar tipos primitivos diretamente. Crie classes de valor para representar conceitos (ex:
Moneyem vez de usardouble).
- Evite usar tipos primitivos diretamente. Crie classes de valor para representar conceitos (ex:
-
Coleções primeiro, sem coleções nuas
- Nunca passe ou retorne listas/arrays diretamente. Encapsule-as em objetos.
-
Evite getters, setters e propriedades
- Força o uso de encapsulamento real. Em vez de expor dados, dê comportamentos ao objeto.
-
Use pequenos objetos e pequenos métodos
- Métodos curtos são mais fáceis de entender, testar e manter.
-
Não use mais de duas variáveis de instância por classe
- Isso força a separação de responsabilidades e maior coesão.
-
Sem métodos com mais de 5 linhas
- Obriga a quebrar lógica em partes pequenas e reutilizáveis.
Exemplo prático (bem simples):
Antes (violando várias regras):
public double calculateTotal(Order order) {
double total = 0;
for (Item item : order.getItems()) {
if (item.isInStock()) {
total += item.getPrice();
} else {
total += item.getPrice() * 0.9; // desconto
}
}
return total;
}
Depois (com Object Calisthenics aplicado):
public class Order {
private Items items;
public Money totalPrice() {
return items.totalPrice();
}
}
Por que usar Object Calisthenics?
- Treina seu "músculo" de design OO
- Leva a um código mais limpo e legível
- Te ajuda a encontrar melhores modelagens de domínio