AdaoPedro / quarkus-clean-arch-base

Implementação do Clean Architecture em uma aplicação Java com Quarkus

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Aplicação Quarkus com Clean Architeture

🏗 O que seria Clean Architeture?

Desde o início de sua jornada como dev, você deve estar ciente dos problemas que um código sujo traz, não em um primeiro momento, mas sim algum tempo depois, com bug's aleatórios e a dificuldade na manutenção.

O mesmo problema ocorre com uma arquitetura de software mal planejada, onde no início tudo parece normal e não ha impacto na produtividade, porém depois de alguns anos o código fica complexo, todo o acoplamento criado não permite os times serem ágeis e entregar funcionalidades em um tempo satisfatório, e quando adicionado uma feature na "região norte" do sistema o "região sul" é impactada e tal problema só é descoberto em produção, então é proposto criar todo o sistema do zero, e a cada 5/7 anos esse ciclo vai se repetir, e a verdadeira raiz do problema, a arquitetura ruim, nunca é considerada.

Fazendo uma analogia entre a construção de um software e a de uma casa, imagine todo o processo de desenvolvimento da residência, desde o projeto até a entrega das chaves. Ao projetar e construir uma casa, bons arquitetos e engenheiros devem confluir suas ideias, sempre respeitando regras específicas, para que, após a entrega do imóvel, qualquer tipo de alteração possa ser realizada da maneira mais prática possível.

Imagine que algum tempo depois do imóvel pronto, o proprietário resolve fazer alguma alteração física da residência, como, por exemplo, ampliar um quarto, acrescentar um novo banheiro e fazer uma nova janela. Dependendo de como a casa foi concebida na mesa do arquiteto, uma alteração pode se tornar mais dispendiosa, demorar mais tempo para ser concluída, ou até mesmo impossível.

Assim como o planejamento de uma casa deve ser responsável e seu produto final precisa ter flexibilidade para alterações ou ampliações, a criação de um software também deve favorecer a qualidade do código. Vale lembrar ainda que, assim como um arquiteto de uma casa, o desenvolvedor do programa é o responsável pela entrega do produto e provavelmente em possíveis upgrades futuros.

Estabelecer uma arquitetura limpa pode facilitar seu próprio trabalho a médio ou longo prazo.

Para mais sobre Arquitetura Limpa.

Durante as últimas décadas, viu-se a evolução de um apanhado de ideias importantes sobre Arquitetura de Software, incluindo: a Arquitetura Hexagonal (também conhecida como Ports and Adapters) de Alistair Cockburn, DCI de James Coplien e Trygve Reenskaug, BCE de Ivar Jacobson, entre outros.(TheWiseDev)

Durante as últimas décadas, viu-se a evolução de um apanhado de ideias importantes sobre Arquitetura de Software, incluindo: a Arquitetura Hexagonal (também conhecida como Ports and Adapters) de Alistair Cockburn, DCI de James Coplien e Trygve Reenskaug, BCE de Ivar Jacobson, entre outros.(TheWiseDev)

Clean Architeture - Fonte - TheWiseDev


✨ O que seria Quarkus?

Quarkus é um framework Java nativo em Kubernetes e de stack completo que foi desenvolvido para máquinas virtuais Java (JVMs) e compilação nativa. Ele otimiza essa linguagem especificamente para containers, fazendo com que essa tecnologia seja uma plataforma eficaz para ambientes serverless, de nuvem e Kubernetes.

Benefícios do framework:

Se você deseja saber mais sobre Quarkus, visite o site oficial deles: https://quarkus.io/ .


🤔 Sobre o projeto?

Consiste em uma API(CRUD de usuário) onde é possível passar no parâmetro da requisição qual implementação de banco de dados será utilizada, não parece algo muito corriqueiro, poderíamos ter uma lógica de negócio mais avançada aqui, porém foi implementado desta forma para facilitar a compreensão de uma das ideias principais por trás da arquitetura limpa, o alto nível de desacoplamento.

Temos duas opções de implementação que podem ser passadas no header, POSTGRES, onde irá realizar a persistência no banco de dados relacional PostgreSQL, e a outra opção MONGO, onde será realizada a persistência no banco de dados NoSql MongoDB.


🗃 Implementação do Repo

Seguindo a teoria neste repositório temos uma implementação com algumas pequenas alterações no modelo original.

sandrolaxCleanArch


👨‍💻 Executando aplicação em dev mode

Necessário executar o docker-compose localizado na raiz do projeto, ele irá subir os containers dos bancos de dados.

docker-compose up

Você pode executar sua aplicação em Dev Mode, este que habilita o hot reload, utilizando o comando:

./mvnw quarkus:dev

NOTA: Quarkus possui uma Dev UI, que está disponível somente em Dev Mode no caminho http://localhost:8080/q/dev/.


📦 Empacotando e executando a aplicação

Para empacotar:

./mvnw package

Isso irá produzir o arquivo quarkus-run.jar no diretório target/quarkus-app/.

Isso não é um über-jar.

Caso você queira empacotar como über-jar, execute o comando a seguir:

./mvnw package -Dquarkus.package.type=uber-jar

Para executar o .jar empacotado convencionalmente:

java -jar target/quarkus-app/quarkus-run.jar

Para executar o .jar empacotado como über-jar:

java -jar target/*-runner.jar

🌪 Criando um executável nativo

Você pode empacotar uma imagem nativa com:

./mvnw package -Pnative

Caso você não tenha a GraalVM instalada, você pode empacotar uma imagem nativa em um container:

./mvnw package -Pnative -Dquarkus.native.container-build=true

Você pode executar sua imagem nativa com:

./target/quarkus-clean-arch-base-1.0.0-SNAPSHOT-runner

Caso você queira saber mais sobre como buildar imagens nativas, consulte: https://quarkus.io/guides/maven-tooling.


🔌 Extenções utilizadas

  • REST Client Classic (guia): Call REST services
  • RESTEasy Classic JSON-B (guia): JSON-B serialization support for RESTEasy Classic
  • Hibernate With Panache(guia) - Simplified Hibernate ORM
  • MongoDB With Panache(guia) - Simplified MongoDB with Panache

About

Implementação do Clean Architecture em uma aplicação Java com Quarkus


Languages

Language:HTML 78.8%Language:Java 21.2%