Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Arquitetura Hexagonal

Boa tarde, li alguns conceitos da arquitetura hexagonal, mas gostaria de exemplos praticos, usando código mesmo, estrutura de pastas. Alguém tem algum exemplo?

1 resposta
solução!

Olá, Izabela. Tudo bem?

A arquitetura hexagonal, também conhecida como Arquitetura de Portas e Adaptadores, é uma forma de estruturar aplicações de modo que elas sejam independentes de tecnologias externas. Essa arquitetura promove a separação entre o núcleo da aplicação e suas dependências externas, facilitando a manutenção e a escalabilidade.

Para te ajudar a visualizar isso, vou te dar um exemplo prático de como você poderia estruturar um projeto simples usando a arquitetura hexagonal.

Estrutura de Pastas

/seu-projeto
│
├── /src
│   ├── /core
│   │   ├── /domain
│   │   │   ├── Entidade1.js
│   │   │   └── Entidade2.js
│   │   ├── /service
│   │   │   ├── Servico1.js
│   │   │   └── Servico2.js
│   │   └── /port
│   │       ├── Repositorio1.js
│   │       └── Repositorio2.js
│   │
│   ├── /adapters
│   │   ├── /in
│   │   │   ├── Controller1.js
│   │   │   └── Controller2.js
│   │   └── /out
│   │       ├── Repositorio1Impl.js
│   │       └── Repositorio2Impl.js
│   │
│   └── /config
│       └── Configuracao.js
│
└── package.json

Explicação

  • /core: Contém a lógica de negócios da aplicação. É o coração da arquitetura e deve ser independente de frameworks e tecnologias externas.

    • /domain: Onde ficam as entidades do domínio, que representam os dados e regras de negócio.
    • /service: Contém os serviços que implementam a lógica de negócio.
    • /port: Define as interfaces que precisam ser implementadas pelos adaptadores.
  • /adapters: Contém as implementações das interfaces definidas nas portas.

    • /in: Adaptadores de entrada, como controladores, que recebem as solicitações e chamam os serviços do núcleo.
    • /out: Adaptadores de saída, como implementações de repositórios que interagem com bancos de dados ou APIs externas.
  • /config: Arquivos de configuração da aplicação.

Exemplo de Código

Aqui está um exemplo simples de como poderia ser uma interface de repositório e sua implementação:

// /core/port/Repositorio1.js
class Repositorio1 {
  salvar(entidade) {
    throw new Error("Método não implementado");
  }
}

module.exports = Repositorio1;

// /adapters/out/Repositorio1Impl.js
const Repositorio1 = require('../../core/port/Repositorio1');

class Repositorio1Impl extends Repositorio1 {
  salvar(entidade) {
    // Implementação do método para salvar a entidade no banco de dados
    console.log(`Salvando entidade: ${entidade}`);
  }
}

module.exports = Repositorio1Impl;

Espero que esses exemplos ajudem a esclarecer um pouco mais sobre a arquitetura hexagonal e como você pode aplicá-la em seus projetos. Bons estudos.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!