Git Product home page Git Product logo

java-modular-architecture's Introduction

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 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.

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

java-modular-architecture's People

Contributors

gbzarelli avatar alissonmedeiros avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.