O Object Calisthenics é um conjunto de boas práticas no design do código discutidas em várias comunidades nos últimos anos que buscam deixar o seu código bom em 4 pontos: manutenção, clareza, testabilidade e compreensão.
2. O porquê
Seu primeiro dia em um projeto novo, uma calculadora de salários !
Objetivo:
- integrar com um sistema legado, dando manutenção nele se
necessário
- garantir que tudo está ok e bem testado
11. "Programe como se a pessoa que for dar
manutenção do seu código fosse um psicopata
violento que sabe onde você vive."
Anônimo
12. Object Calisthenics
Um conjunto de exercícios de programação
descritos por Jeff Bay, formalizado em 9 regras
Visam melhorar o código em 4 pontos:
● Manutenção
● Leitura
● Testabilidade
● Compreensão
13. Ou expandindo...
1. Coesão
2. Baixo acoplamento
3. Sem redundância
4. Encapsulamento
5. Testabilidade
6. Legibilidade
7. Foco
14. Quais são as regras?
1. Um nível de indentação por
método
2. Não usar else
3. Encapsular tipos primitivos
4. Encapsular coleções em classes
5. Um ponto por linha
6. Evitar abreviações
7. Manter as entidades pequenas
8. Não ter mais de duas variáveis de
instância por classe
9. Não usar getters / setters
16. Um nível de indentação por método
Camadas de indentação
X
Leitura
17. Um nível de indentação por método
Camadas de indentação
X
Leitura
18. Um nível de indentação por método
Camadas de indentação
X
Leitura
19. Um nível de indentação por método
#callback hell
Código extraído de http://callbackhell.com/
20. Um nível de indentação por método
#callback hell
Código extraído de http://callbackhell.com/
21. Um nível de indentação por método
#callback hell
Código extraído de http://callbackhell.com/
22. Não usar else
Repete o mesmo problema de legibilidade da última regra
Aumenta o fator de ramificação do código (aumentando a
complexidade dos testes)
28. Encapsular tipos primitivos
● Alguns tipos podem ter comportamentos que valem a pena ser
capturados
● Value Objects X Entidades
● Evita o code smell "Primitive Obsession"
32. Um ponto por linha
Não é válido para Fluent Interfaces ou Method Chaining (exemplo: chai)
Em outros casos:
● Múltiplos encadeamentos podem indicar múltiplas responsabilidades
● "Fale com seus amigos próximos, não fale com estranhos"
● "Cannot read property of undefined / null"
33. Um ponto por linha
Dilema: Open/Closed
Uma classe deve ser aberta a extensão, mas fechadas a mudanças
40. Manter as entidades pequenas
Tentar manter as funções / arquivos em um número
pequeno de linhas (50 ~ 100 linhas)
Manter uma responsabilidade por arquivo
47. Não ter + de 2 vars de instância p/ classe
Controlar a variação de estados de um objeto / componente
Evitar um grande número de dependências dentro de uma classe / entidade