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:
- 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.
- 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.
- 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