Eae gente bonita, beleza? Dessa vez vim falar um pouco sobre arquitetura e queria começar falando sobre a arquitetura hexagonal, que pelo menos assusta, mas na verdade, ela é bem simples.
O que é arquitetura de software?
Pode parecer óbvio mas nem todas as pessoas imaginam que um software tem uma arquitetura, então vou dar uma breve explicada sobre. A arquitetura de software é a forma como o seu código é organizado e arquiteto, não só as pastas que foram criadas mas também a regra que o time irá seguir para saber qual parte do software deve se relacionar com quem. Pode ser um pouco confuso, mas prometo que vai ficar mais simples!
Como funciona a arquitetura hexagonal?
Bom a arquitetura hexagonal ou também conhecida como ports and adapters tem o objetivo de isolar a camada de regra de negócio da sua aplicação fazendo que você possa trocar banco, serviços ou até mesmo a forma como é consumida sem afetar o core do app.
Normalmente uma aplicação que trabalha com essa arquitetura costuma ter 3 pastas.
Porém é importante disser que não é nada escrito na pedra e você pode alterar e ver esse mesmo tipo de arquitetura de formas diferentes. Recomendo dar uma pesquisada no Github, vai ver muita coisa legal lá.
- Infraestrutura: Aqui fica toda a parte de infraestrutura da aplicação como apis rest, serviços de mensageria e coisas do tipo.
- Application: Aqui você vai ser os casos de uso da sua aplicação ou podendo ter até serviços, vai depender da situação.
- Core: Aqui você vai ter os casos de uso da sua aplicação ou até mesmo serviços, dependendo da situação.
Abaixo tem uma imagem que pode ilustrar bem o que foi explicado a cima.
Como funciona a comunicação entre as camadas?
Bom tive a experiência trabalhando com java e apliquei também utilizando NestJS e a palavra-chave são interfaces! Você só precisa criar uma interface dizendo o que a camada vai receber e vai retornar, assim sendo a sua implementação irrelevante para a camada que está utilizandoe assim podendo ter implementações usando vários bancos diferentes mas sempre mantendo o mesmo "contrato" entre camadas.
Quando usar
A arquitetura hexagonal é ótima, mas não é uma bala de prata e deve ser usada no momento correto para evitar complexidade desnecessária em seu projeto. É altamente recomendada quando você tem diversos bancos de dados ou quando sua aplicação precisa ser consumida de formas diferentes. Assim, você terá a mesma regra de negócio sendo usada e sua aplicação poderá trabalhar com várias peças sem afetar outra camada.
Conclusão
Em resumo, podemos dizer que a arquitetura hexagonal serve para separar sua aplicação em camadas e isolá-las. Isso evita que sua regra de negócio esteja sempre misturada com a lógica da sua aplicação.
--
Espero que tenha sido claro e tenha ajuda a entender um pouco mais sobre o assunto, fique a vontade para dúvidas e sugestões abaixo!
Recomendo darem uma olha em projeto no Github, pesquisem no google por arquitetura hexagonal github na linguagem que quiserem e sejam felizes. Recomendo apertar a tecla '.' (ponto final) do seu teclado quando estiverem logados para navegar e visualizar de uma forma melhor os projetos.
Se chegou até aqui, me segue la nas redes vizinhas.
Top comments (5)
I found this article in which there is a proposal for a better-understanding folder structure. I think it uses better words for port and drives concepts.
tbuss.de/posts/2023/9-how-to-do-th...
What do you think?
I will read this article, but like I said exist many ways to structure your project in this case. To be honest is kinda wired for me, but ok if this works. Thanks for the suggestion!
Hi Cristian Magalhães,
Your tips are very useful.
Thanks for sharing.
Irado o post, sempre ouço falar dessa arquitetura e sempre é alguém que ama ou odeia nunca o meio termo rs, espero um dia ter um contato mais próximo dela, vlw!
Cara eu curti bastante a proposta dela, porém o uso é bem especifico, se você usa em um projeto que não precisa acaba tendo um tempo de desenvolvimento muito maior e desnecessário, fora ser meio burocratica as vezes.