Clean Architecture Não É Sobre Pastas

Abra dez repositórios diferentes de "Clean Architecture em .NET" no GitHub e você vai encontrar dez estruturas de pastas diferentes: Domain, Application, Infrastructure, Presentation. Quatro camadas bem arrumadas, dependências apontando para dentro, um diagrama bonito no README. Mesmo assim, boa parte desses códigos é tão difícil de mudar quanto os "bagunçados" que substituíram.

A estrutura de pastas não é a arquitetura

Clean Architecture, como Robert Martin descreve, é sobre uma única regra: dependências apontam para dentro, em direção ao domínio, nunca para fora, em direção a frameworks ou infraestrutura. Só isso. Todo o resto — os nomes específicos das camadas, a estrutura de projetos, a quantidade de projetos na sua .sln — é detalhe de implementação.

O erro é tratar a estrutura de pastas como o objetivo. É possível ter quatro camadas perfeitamente nomeadas e ainda assim ter:

  • Entidades de domínio com setters públicos que qualquer camada pode alterar livremente.
  • Serviços de "Application" que na prática são só wrappers finos em volta de chamadas do Entity Framework.
  • Regras de negócio vazando para controllers porque "é só essa validação aqui".

Nada disso aparece num diagrama de dependências, mas tudo isso derrota o propósito.

O que realmente importa

Se eu tivesse que resumir numa checklist curta, seria assim:

  1. Você consegue testar a lógica de domínio sem subir um banco de dados? Se não, seu domínio depende de infraestrutura, não importa o que a pasta diga.
  2. Você conseguiria troçar seu banco, seu framework de UI ou seu message broker sem tocar nas regras de negócio? Se trocar Entity Framework por Dapper significa reescrever lógica de domínio, a regra de dependência não está realmente sendo respeitada.
  3. Um desenvolvedor novo precisa ler cinco arquivos em três camadas para entender uma regra de negócio? Isso geralmente é sinal de que a arquitetura está organizada em torno de preocupações técnicas, e não do domínio em si.

A conclusão sem graça

Clean Architecture é uma restrição, não uma estrutura. É perfeitamente possível violá-la dentro de uma árvore de pastas impecavelmente organizada, e é possível respeitá-la num projeto único sem pasta nenhuma (ainda que eu não recomende isso para um time). Antes de adicionar mais uma camada, pergunte se você está protegendo a regra de dependência ou só decorando em volta dela.

Vamos conversar?

Tem um projeto, uma vaga ou só quer trocar uma ideia sobre o assunto? Envie uma mensagem.

Entrar em contato