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