GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - helpdeveloper/java-modular-architecture: [JAVA] Projeto exemplo de uma arquitetura modular em Java

BranchesTags
Open more actions menu

Latest commit

 

History

101 Commits
101 Commits

Folders and files

NameName
Last commit message
Last commit date
.docker-compose
.docker-compose
 
 
.github/workflows
.github/workflows
 
 
.mvn/wrapper
.mvn/wrapper
 
 
acceptance-test
acceptance-test
 
 
adapter
adapter
 
 
app
app
 
 
core
core
 
 
images
images
 
 
k6
k6
 
 
resources
resources
 
 
.gitignore
.gitignore
 
 
.maven-dockerignore
.maven-dockerignore
 
 
Dockerfile
Dockerfile
 
 
Dockerfile.spring
Dockerfile.spring
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
lombok.config
lombok.config
 
 
mvnw
mvnw
 
 
mvnw.cmd
mvnw.cmd
 
 
pom.xml
pom.xml
 
 
spotbugs-exclude.xml
spotbugs-exclude.xml
 
 

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

  • JUnit5
  • Mockito
  • AssertJ
  • Mutação
  • Cobertura de código (linha e condições)

Aceitação (acceptance-test)

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

O que tem:

  • Docker
  • TestContainers
  • RestAssured
  • WireMock
  • Flyway

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

  • http://localhost:5000

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.

  • http://localhost:3000
    • login: admin
    • senha: admin

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

  • http://localhost:9090

Acessando o banco de dados

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

  • http://localhost:5000/adminer
    • servidor: sampledb
    • usuário: user
    • senha: pass123
    • base: sample

Links

  • Apresentação em slides - Jornada Colaborativa Summit 2021
  • Artigo - Criando uma aplicação modular muito além do Clean Architecture

Desenvolvedores

Alisson Medeiros

  • LinkedIn - https://www.linkedin.com/in/alisson-medeiros-8bb67830/
  • GitHub - https://github.com/AlissonMedeiros
  • Email - [email protected]

Guilherme Biff Zarelli

  • Blog/Site - https://helpdev.com.br
  • LinkedIn - https://linkedin.com/in/gbzarelli/
  • GitHub - https://github.com/gbzarelli
  • Medium - https://medium.com/@guilherme.zarelli
  • Email - [email protected]

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

About

[JAVA] Projeto exemplo de uma arquitetura modular em Java

Resources

Readme
Apache-2.0 license
Activity
Custom properties

Stars

129 stars

Watchers

4 watching

Forks

20 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.