Iniciante Arquitetura de Sistemas
Arquitetura Hexagonal (Ports & Adapters)
A arquitetura hexagonal, também chamada de Ports & Adapters, coloca a regra de negócio no centro e empurra tudo que é técnico (banco, web, fila) para fora. O objetivo é que o coração do sistema não dependa de detalhes de infraestrutura.
A ideia central
Web CLI
\ /
[ Adapter ]
|
(Porta)
|
+-----------+
| DOMÍNIO | <- regras de negócio
+-----------+
|
(Porta)
|
[ Adapter ]
/ \
Banco Fila
O domínio fica no meio. Ele define portas (interfaces). Os adapters implementam essas portas e conectam o mundo externo.
Portas e adapters
- Porta: um contrato, uma interface. Ex.: “salvar pedido”.
- Adapter: a implementação concreta. Ex.: salvar no PostgreSQL, ou num arquivo, ou em memória para testes.
O domínio fala com a porta. Quem implementa fica de fora.
// Porta (definida pelo domínio)
interface RepositorioPedido {
salvar(pedido)
buscar(id)
}
// Adapter (na infraestrutura)
class RepositorioPedidoSQL implements RepositorioPedido {
salvar(pedido) { /* grava no banco */ }
buscar(id) { /* lê do banco */ }
}
Isolar a entrada e saída (I/O)
A regra é simples: o domínio nunca importa banco, framework web ou biblioteca de fila. Esses detalhes vivem só nos adapters. Assim você troca o banco sem tocar na lógica.
Vantagens
- Domínio testável sem banco nem rede.
- Fácil trocar tecnologias (banco, API, fila).
- Regras de negócio claras e isoladas.
Desvantagens
- Mais arquivos e abstrações no começo.
- Pode ser exagero para projetos muito simples.
Quando usar
Vale a pena em sistemas com regras de negócio ricas e que devem durar anos, onde a infraestrutura pode mudar. Para um script pequeno, é overkill.