Arquitetura Hexagonal na Prática | Arquitetura com Java e Spring Boot
A Arquitetura Hexagonal, também conhecida como Arquitetura de Portas e Adaptadores, é um padrão de arquitetura de software que define uma forma flexível e independente para a estrutura do código da aplicação. Essa abordagem facilita a criação de uma aplicação que interage de forma eficiente com sistemas externos, como bancos de dados e APIs, sem se acoplar diretamente a eles.
Assim como a Arquitetura Limpa, a Arquitetura Hexagonal pode ser aplicada em diversas linguagens e frameworks, trazendo um foco especial na separação de responsabilidades e na independência de tecnologias específicas.
Portas e Adaptadores são o coração da Arquitetura Hexagonal. Esse padrão organiza o sistema em uma estrutura onde as interações externas (como APIs, bancos de dados, interfaces de usuário) são tratadas como “adaptadores”, que se comunicam com o núcleo da aplicação através de “portas” bem definidas. Esse conceito permite que o núcleo da aplicação se mantenha independente dos detalhes de implementação externos, tornando-o mais fácil de testar e modificar.


As portas são interfaces que definem os contratos de comunicação entre o núcleo da aplicação e os adaptadores externos. Existem dois tipos de portas:
Os adaptadores implementam as portas para que o núcleo da aplicação possa interagir com sistemas externos sem conhecer suas implementações específicas. Esses adaptadores são responsáveis por converter as solicitações e respostas dos sistemas externos para o formato esperado pelo núcleo.
Exemplo: Em um projeto de e-commerce, um adaptador de banco de dados pode ser criado para gerenciar a comunicação com o banco de dados. Esse adaptador usa uma porta de saída que define métodos como saveProduct() e findProductById(), permitindo que o núcleo da aplicação armazene e recupere produtos sem saber os detalhes específicos do banco de dados em uso.
Injeção de Dependência no Spring
Para que o Spring injete automaticamente os adaptadores nas portas, é comum seguir alguns padrões:
Anote os adaptadores com @Component, @Service, ou @Repository (no caso de adaptadores de saída que interagem com o banco de dados). Isso permite que o Spring os descubra e gerencie como beans.