Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 

Repository files navigation

Object Calisthenics 🏋️‍♂️ - Exemplos em PHP

Este repositório apresenta os princípios de Object Calisthenics, um conjunto de boas práticas de programação orientada a objetos proposto por Jeff Bay. Aqui você encontrará explicações e exemplos em PHP para cada uma das 9 regras.

📖 O que é Object Calisthenics?

Object Calisthenics são "exercícios" que ajudam a escrever código orientado a objetos mais limpo, coeso e fácil de manter. São 9 regras que incentivam um estilo de codificação mais disciplinado.


🧱 As 9 Regras com Exemplos em PHP

1. Um nível de indentação por método

Evite estruturas aninhadas e extraia lógica para métodos auxiliares.

Bom:

if ($usuario->estaAtivo()) {
    $this->processarPagamento($usuario);
}

Ruim:

if ($usuario !== null) {
    if ($usuario->estaAtivo()) {
        $this->processarPagamento($usuario);
    }
}

2. Não use a palavra-chave else

Evite else. Prefira retornos antecipados ou métodos separados.

Bom:

if (!$usuario->temPermissao()) {
    return;
}

$this->executarAcao();

Ruim:

if ($usuario->temPermissao()) {
    $this->executarAcao();
} else {
    $this->negarAcesso();
}

3. Encapsule todos os tipos primitivos e strings

Evite passar strings e números soltos. Use objetos com significado.

Bom:

class Cpf {
    public function __construct(private string $numero) {}
}

Ruim:

$cpf = "123.456.789-00";

4. Primeira classe de coleções

Não exponha arrays diretamente. Encapsule em objetos que expressam intenção.

Bom:

class Carrinho {
    private array $itens = [];

    public function adicionar(Item $item): void {
        $this->itens[] = $item;
    }
}

Ruim:

$itens = [];
$itens[] = $item;

5. Um ponto por linha

Evite acessar objetos internos de outros objetos. Exponha métodos de alto nível.

Bom:

$cidade = $cliente->cidade();

Ruim:

$cidade = $cliente->getEndereco()->getCidade();

6. Não abrevie

Evite abreviações. Nomes devem ser claros e descritivos.

Bom:

class RelatorioDeVendas {}

Ruim:

class RelVend {}

7. Mantenha todas as entidades pequenas

Classes e métodos devem ser pequenos e com responsabilidades únicas.

Bom:

class CalculadoraDeFrete {}
class ValidadorDeEndereco {}

Ruim:

class Pedido {
    public function calcularFrete() { ... }
    public function validarEndereco() { ... }
    public function gerarNotaFiscal() { ... }
}

8. Não use getters e setters

Evite expor o estado interno dos objetos. Use métodos que expressem comportamentos.

Bom:

$total = $pedido->valorTotal();

Ruim:

$itens = $pedido->getItens();
$total = array_sum(array_map(fn($item) => $item->getPreco(), $itens));

9. Use apenas um nível de abstração por classe

Mantenha métodos de alto nível separados dos detalhes de implementação.

Bom:

class GeradorDeRelatorio {
    public function gerar(): void {
        $dados = $this->coletarDados();
        $this->gerarArquivo($dados);
    }
}

Ruim:

class GeradorDeRelatorio {
    public function gerar(): void {
        $conexao = new PDO(...);
        $stmt = $conexao->query("SELECT * FROM dados");
        ...
    }
}

📁 Exemplos de Código

Veja a pasta /exemplos para implementações completas de cada regra em projetos PHP.

📚 Referências

Jeff Bay – Object Calisthenics, no livro The ThoughtWorks Anthology

Artigo: Object Calisthenics – William Durand

🤝 Contribuições

Contribuições são bem-vindas! Sinta-se à vontade para abrir issues ou enviar pull requests.

About

Exemplos das regras de Object Calisthenics explicadas em PHP

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages