CRUD com Arquitetura Limpa
Inversão de dependência aplicada em um CRUD real

O desafio
Um CRUD é o exercício mais banal do desenvolvimento — e justamente por isso é um bom laboratório para testar arquitetura. Se a estrutura não se justifica num problema simples, ela provavelmente é complexidade desnecessária.
O objetivo aqui não era cadastrar clientes: era aplicar inversão de dependência num projeto pequeno o suficiente para entender por inteiro.
O que eu fiz
Camada de domínio isolada
A entidade Cliente e a interface ClienteRepositorio não conhecem o Firebase. Elas definem o contrato; a infraestrutura se adapta a ele.
Implementação intercambiável
ColecaoCliente implementa o contrato usando Firestore. Trocar por PostgreSQL exigiria escrever outra implementação — sem tocar em uma linha de regra de negócio.
Lógica de tela em hook
Toda a orquestração (selecionar, salvar, excluir, alternar entre tabela e formulário) vive em useClientes. Os componentes só renderizam.
Galeria



Decisões técnicas
O "D" do SOLID na prática
Inversão de dependência costuma ser explicada com exemplos abstratos. Aqui dá para ver o fluxo real: pages → hooks → core (interface) ← backend (implementação). A seta que aponta para trás é o ponto todo.
Entidade rica, não anêmica
Cliente.ts encapsula dados e comportamentos, incluindo a criação de um cliente vazio. É modelagem de domínio, não um type solto.
É o projeto que melhor demonstra como eu penso arquitetura: a estrutura serve para tornar a mudança barata, não para exibir padrões.