Skip to content

helpdeveloper/java-modular-architecture

Folders and files

NameName
Last commit message
Last commit date

Latest commit

488c9eb · Jul 18, 2023
Jan 18, 2023
Jan 19, 2023
May 10, 2022
Jul 18, 2023
Jul 18, 2023
Jul 18, 2023
Jul 13, 2023
Mar 20, 2021
Mar 19, 2021
Nov 14, 2021
Mar 19, 2021
Nov 7, 2021
Jan 19, 2023
Jan 18, 2023
Mar 20, 2021
Jan 19, 2023
Mar 19, 2021
May 10, 2022
May 10, 2022
Jul 18, 2023
May 10, 2022

Repository files navigation

Issues Forks Stars Release Version WorkFlow Codacy Badge Coverage Status

Arquitetura modular

O objetivo do bom design de software, como já diria Robert C. Martin, em seu livro 'Clean Architecture: A Craftsman's Guide to Software Structure and Design', é minimizar os recursos humanos necessários para construir e manter um determinado sistema.

Esse projeto é inspirado em situações e dificuldades reais já vivenciadas que nos permitiu ter uma visão um pouco mais abrangente sobre como ter e construir uma arquitetura duradoura. "The only way to go fast, is to go well." - Robert C. Martin

Modelo proposto

Foco no negócio

domain

A camada mais restrita de todas possui o mapeamento de regras e restrições do domínio do negócio.

use-case

Determina o comportamento da funcionalidade exigida, no caso, o use case será o orquestrador do domínio.

Adaptadores

input

Camada de apresentação do sistema, nela, por exemplo, iremos fornecer nossos end-points.

output

Todo acesso a dados seja banco e/ou api's expostos pelas 'interfaces' do Use Case devem ser implementadas nessa camada.

Testabilidade

Facilidade na execução dos testes com uma melhor granularidade.

Unitários

Aceitação (acceptance-test)

Teste do ponto de vista de quem irá consumir, sempre buscando o mais perto de produção.

O que tem:

O que não tem:

  • Framework (Spring ou quarkus)

Fluxo de dependências das camadas

Executando o projeto

O Projeto conta com uma stack configurada no docker-compose completa. Fornecendo toda infraestrutura necessária para o desenvolvedor.

Requerido

  • Java 17+
  • Maven 3+
  • docker
  • docker-compose

Build do projeto, já com todos os testes unitários e os testes de aceitação

O framework é definido pelo profile, sendo que o default é do Quarkus.

Quarkus

mvn clean install -Pquarkus
# or by default:
mvn clean install

Spring boot

mvn clean install -Pspring

Gerando imagem docker com o Quarkus

docker build  -t helpdev/app-quarkus-jvm .

Gerando imagem docker com o Spring

docker build  -t helpdev/app-spring-jvm .

Iniciando serviço

O comando sobe toda infraestrutura necessária para a aplicação

docker-compose -f .docker-compose/stack.yml up

Agora podemos iniciar nossa aplicação

Quarkus:

docker-compose -f .docker-compose/quarkus-app.yml up

Spring:

docker-compose -f .docker-compose/spring-app.yml up

Consumindo API

Para ter uma 'interface' de fácil com o OpenAPI consumido usamos o RapiDoc.

Basta acessar Endereço local e já pode testar as APIs

Rodando teste de carga

Para quem ainda não conhece o k6 é uma ferramenta para testes de carga, basta Instalar o K6 e executar o comando:

k6 run  k6/script.js

O tempo de execução do K6 e quantidade de 'execuções' é configurável, basta alterar o Script do K6.

Monitorando aplicação

Observabilidade

Saber como a aplicação está se comportando e métricas

A combinação poderosa entre o Grafana e o Prometheus permite gráficos e alerta configuráveis. Acessando o Grafana Local já basta navegar até o dashboard précadastro e ter uma amostrado dos dados da aplicação e das ferramentas.

Já o Promehteus Local só acessar o link (sem login):

Acessando o banco de dados

Ao acessar o Adminer é possível executar 'scripts' SQL além de adicionar e alterar dados dentro das tabelas.

Links

Desenvolvedores

Alisson Medeiros

Guilherme Biff Zarelli

Contribua

Pull Requests são bem-vindos. Para mudanças importantes, abra uma 'issue' primeiro para discutir o que você gostaria de mudar. Certifique-se de atualizar os testes conforme apropriado.

Licence

Apache-2.0