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 11+
- Maven 3+
- docker
- docker-compose
Build do projeto, já com todos os testes unitários e os testes de aceitação
mvn clean install
Gerando imagem docker com o Quarkus
docker build -t helpdev/app-quarkus-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
docker-compose -f .docker-compose/quarkus-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.
- http://localhost:3000
- login: admin
- senha: admin
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.
- 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.