Um pouco sobre Arquitetura Hexagonal
Tags: programming, braziliandevs, development, architecture
Published: 2024-04-18 20:51:00

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!

![Confuso](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExM2VzdnJhZ3lraWltemdsY3d6bW5hcmI2ZDJmbjdud3l3OTN4N3FwbyZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/ji6zzUZwNIuLS/giphy.gif)

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

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/p267ftvfab96bpaywhed.png)


## 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](https://cristiansilva.dev/).

<img src="https://media.giphy.com/media/xULW8v7LtZrgcaGvC0/giphy.gif" alt="thank you dog" />