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?
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?
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.
/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
/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.
/adapters: Contém as implementações das interfaces definidas nas portas.
/config: Arquivos de configuração da aplicação.
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.