🚀 Oferta especial: 60% OFF no CrazyStack - Últimas vagas!Garantir vaga →
Arquitetura

Clean Architecture na Prática: Transição de Camadas para uma Base mais Sólida

Aprenda, na prática, a migrar de arquitetura em camadas tradicional para Clean Architecture em Java, blindando seu domínio, desacoplando frameworks e tornando código fácil de evoluir.

CrazyStack
13 min de leitura
Clean ArchitectureJavaSpringArquitetura de SoftwareDomínio

Por que isso é importante

Grande parte dos sistemas de software quebram ao evoluir porque sua lógica de negócios está acoplada a frameworks, bancos e bibliotecas externas. Clean Architecture oferece meios para proteger o core do seu sistema, facilitando testes, evolução e trocas tecnológicas. Aprender a aplicar esse conceito é seu trunfo para criar código antifrágil e pronto para o futuro.

Verdade dura: pasta não define arquitetura

O jeito como você dá nome às pastas pouco diz sobre a arquitetura do seu projeto. O que realmente define é a separação entre regra de negócio (domínio) e detalhes de implementação. Não importa o layout do seu diretório, mas sim onde mora a inteligência do sistema – e como ela se conecta ao exterior.

ℹ️Atenção

Trocar nomes e mover arquivos não muda se seu domínio está exposto a bibliotecas ou frameworks – só o design da dependência importa.

Arquitetura Limpa: O Círculo Central Tem Blindagem Total

Em Clean Architecture, a camada mais importante é o domínio ("core"): entidades, regras, casos de uso e contratos com o mundo externo. Tudo o que está ali dentro deve funcionar sem depender de nenhum framework, banco de dados ou biblioteca de terceiros.

⚠️Atenção

Colocar qualquer annotation, importação de framework ou dependência técnica dentro da sua camada de domínio quebra a arquitetura limpa.

Framework? Infraestrutura: só na periferia

Tudo aquilo que é detalhe – banco, JPA, REST, validação, anotações, tecnologia – vive em estruturas externas (infra). Só infra pode depender do core, e só via contratos (gateways ou interfaces). O core não pode nem saber que isso existe.

Conceito-chave: Fluxo de dependência é do exterior para o centro

Seu core pode expor contratos (interfaces), mas nunca chamar infraestrutura diretamente. Externos acessam internos, nunca o contrário. Controllers chamam casos de uso, casos de uso usam gateways e entidades, gateways são implementados na infraestrutura.

Dica Dev Doido

Quer ver esse fluxo ao vivo? No canal Dev Doido no Youtube você encontra demonstrações visuais claras de cada ligação – é o melhor exercício para gravar esse conceito!

Anatomia: Como organizar pastas para Clean Architecture

O segredo não está em milhares de nomes complexos: com dois grandes pacotes você já separa tudo – core (domínio) e infra (infraestrutura). Por dentro, use apenas subpastas como entities, enums, gateways, usecases no core, e details, exceptions, mappers, persistence, presentation, gateways na infra.

Ferramental: stack inicial Java para arquitetura limpa

Nada de inventar roda ou depender de stack exótica: Spring Web, Lombok, Postgres Driver, Flyway, Spring Data e Validation. Tudo o que for tecnicamente necessário na sua infra, nunca no core.

Primeiro passo: blinde o domínio

Sempre comece a implementação criando seu core: entidades, enums, gateways (contratos) e casos de uso. Jamais traga anotações, nem framework ou imports “estranhos” pra dentro. Entidades podem até ser records, desde que sejam puras.

Contratos: gateways são a ponte entre domínio e mundo

Gatesways são interfaces que definem operações do negócio (criar, buscar, cancelar, etc.). Eles vivem no core e só recebem/retornam objetos do próprio core (sem tipos de frameworks). Implementações desses gateways são feitas na infra.

Use cases: um caso de uso para cada operação do negócio

Para cada ação relevante (criar, atualizar, cancelar, concluir, buscar), crie um use case. No core, eles recebem e retornam entidades ou valores, apenas. Fica fácil testar unitariamente e evoluir o sistema sem riscos de quebrar tudo.

Como liga tudo: controllers e adaptadores só na periferia

Controllers, endpoints, jobs e outros “tratadores externos” moram fora do domínio e apenas instanciam ou executam casos de uso via gateways – nunca acessando entidades de frameworks.

Erro comum

Tentar acessar um repositório, JPA ou frameworks direto do core: isso já é metade do acoplamento e elimina todo benefício da arquitetura limpa.

Infraestrutura: faça sujo, mas só lá fora

Packages da infra podem (e devem) conter detalhes e tecnologia: JPA, mappers, exceptions, beans, controllers, repositórios, qualquer coisa específica da stack. Só mantenha essa sujeira longe do core.

Migração de camadas para arquitetura limpa: panorama visual

Na arquitetura em camadas, app chama controller, que chama service, que chama repository, que chama banco. Em Clean Architecture, controllers e detalhes orbitam o core (domínio), chamando use cases e gateways. Assim, se trocar banco, framework ou técnica, só mexe na periferia – o core é intocado.

Passo a passo real: do sistema em camadas para domínio limpo

Renomeie e estruture pastas: core (entities, enums, gateways, usecase), infra (details, exceptions, mappers, persistence, presentation, gateways). Comece migrando entidades (como record sem annotations), status (enum), depois gateways, e só então use cases. Deixe detalhes técnicos só pra infra. Instancie e injete dependências via contratos — e observe: ficou mais fácil testar, manter e evoluir.

Antes de implementar: checklist para não acoplar nada

Garanta: nenhuma annotation, import de tecnologia ou biblioteca externa no core. Contratos sempre no core e implementações só na infra. Foco no domínio puro, usando apenas tipos da linguagem base. Facilite sua vida: documentação visual (como no canal Dev Doido) ajuda a fixar. E sempre teste o core desplugado do resto!

Saber mais: aprenda arquitetura limpa vivendo código real

Compreensão verdadeira de architecture não vem só de diagramas ou tutoriais. Acompanhe vídeos, experimente refatorar projetos de verdade, e mantenha sempre o domínio protegido. Pratique, corrija e evolua até se tornar automático.

ℹ️Atenção

Faça parte da comunidade Dev Doido no Youtube para visualizar migrações ao vivo, aprender com comentários e acelerar sua curva de aprendizado com projetos prontos.

Resumo prático: O que não esquecer

Arquitetura limpa é sobre separar essência de detalhe. O domínio não depende de nada externo, frameworks só orbitam o core via contratos, e a vida do desenvolvedor fica mais simples quando nada está acoplado ao banco, à API ou a qualquer stack! O segredo? Pratique, questione e evolua.

Domine React e Node com o CrazyStack

Aprenda técnicas avançadas de React com nosso curso completo