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 — java-modular-architecture/README.md at main · helpdeveloper/java-modular-architecture

Expand file tree

/

README.md

Copy path
More file actions
More file actions

Latest commit

 

History

History
History
216 lines (152 loc) · 6.88 KB
/

README.md

Copy path

File metadata and controls

216 lines (152 loc) · 6.88 KB
Raw
Copy raw file
Download raw file
Outline
Edit and raw actions

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

You are visitor 01402520 — 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.