É muito comum que desenvolvedores confundam Arquitetura Hexagonal (tambĂ©m conhecida como Ports and Adapters) e Domain-Driven Design (DDD). Embora frequentemente utilizados juntos, eles resolvem problemas diferentes: um foca na estrutura organizacional do cĂłdigo e o outro na modelagem do negĂłcio e complexidade do domĂnio.
1. O que é cada uma? Link para o cabeçalho
Arquitetura Hexagonal (Padrão Estrutural) Link para o cabeçalho
Focada em isolamento. O objetivo Ă© que o “coração” da sua aplicação (o domĂnio) nĂŁo saiba nada sobre o mundo externo (bancos de dados, APIs, interfaces gráficas).
-
Ports: Interfaces que definem como o domĂnio interage com o externo.
-
Adapters: Implementações concretas que conectam o mundo externo aos ports.
DDD (Abordagem de Design) Link para o cabeçalho
Focada em negĂłcio. É uma metodologia para lidar com sistemas complexos, onde o foco está na linguagem ubĂqua e na separação do domĂnio em partes gerenciáveis (Bounded Contexts). O DDD dita o que deve ser modelado, enquanto a arquitetura hexagonal pode ser o como essa modelagem Ă© organizada fisicamente.
2. Diagramas de Comparação Link para o cabeçalho
Arquitetura Hexagonal Link para o cabeçalho
graph TD
subgraph "Camada Interna (DomĂnio)"
Core[Regras de NegĂłcio / Entidades]
end
subgraph "Ports (Interfaces)"
InputPort[Input Port]
OutputPort[Output Port]
end
subgraph "Adapters (Mundo Externo)"
API[API / UI] --> InputPort
InputPort --> Core
Core --> OutputPort
OutputPort --> DB[Banco de Dados]
end
DDD (Visão de Contexto) Link para o cabeçalho
graph LR
subgraph "Bounded Context A"
A[Modelagem de Vendas]
end
subgraph "Bounded Context B"
B[Modelagem de Inventário]
end
A -- Linguagem UbĂqua --> B
3. Estrutura de Pastas Sugerida Link para o cabeçalho
Estrutura Hexagonal (Foco em Isolamento) Link para o cabeçalho
src/
├── core/ # DomĂnio Puro (Entidades, Casos de Uso)
│ ├── domain/
│ └── ports/ # Interfaces
├── infrastructure/ # Adapters (Implementações técnicas)
│ ├── database/
│ └── http/
└── main/ # Inicialização da aplicação
Estrutura DDD (Foco em Contexto) Link para o cabeçalho
src/
├── sales/ # Bounded Context de Vendas
│ ├── domain/ # Agregados, Entities, Value Objects
│ ├── application/ # Serviços de Aplicação
│ └── infrastructure/
├── inventory/ # Bounded Context de Estoque
│ ├── domain/
│ └── ...
└── shared/ # Kernel compartilhado (opcional)
4. Diferenças Fundamentais Link para o cabeçalho
| CaracterĂstica | Arquitetura Hexagonal | DDD |
|---|---|---|
| Natureza | PadrĂŁo Arquitetural (Estrutura) | Metodologia de Design (Conceito) |
| Foco | Desacoplamento do sistema | Complexidade do domĂnio |
| Objetivo | Independência de frameworks/BD | Comunicação clara com especialistas |
| Complementariedade | Pode ser usada sem DDD | O DDD se beneficia de arquiteturas isoladas |
Resumo: A Arquitetura Hexagonal provê o “esqueleto” para proteger seu código, enquanto o DDD provê a “alma” para garantir que o software resolva corretamente o problema do cliente.