O projeto segue uma estrutura modular com base nos princípios da Clean Architecture, proporcionando uma separação clara de responsabilidades.
A estrutura principal do projeto é organizada da seguinte forma:
-
adapter: Contendo as classes responsáveis pela comunicação externa, como controladores REST, interfaces de banco de dados, e outros detalhes específicos de implementação;
-
application: Aqui são definidos os casos de uso da aplicação, que representam a lógica de negócios. Sendo esta camada a responsável por coordenar as interações entre os componentes;
-
domain: Contém as entidades do domínio e as regras de negócio. Esta camada é independente de qualquer tecnologia ou framework específico, garantindo reutilização em diferentes contextos.
Aqui estão algumas das principais tecnologias e bibliotecas utilizadas:
-
Java 17: Atualmente a versão LTS mais estável e com uma gama muito maior de suporte da própria comunidade e da Oracle;
-
Spring Boot: Framework que simplifica o desenvolvimento de aplicativos Java. No contexto deste projeto, o módulo Webflux é utilizado para construir APIs reativas;
-
Spring Data MongoDB e MongoDB Driver: Integração com o MongoDB para facilitar as operações de banco de dados através do driver oficial para Java;
-
Lombok: Biblioteca que simplifica a criação de classes Java, reduzindo a necessidade de escrever código boilerplate;
-
JUnit e TestNG: Frameworks de teste para escrever e executar testes unitários e de integração;
-
Reactor: Biblioteca reativa utilizada pelo Webflux para suportar programação reativa.
- Certifique-se de ter o Java 17 e o MongoDB instalados em seu sistema;
- Clone este repositório;
- Importe o projeto em sua IDE preferida;
- Configure as informações do banco de dados no arquivo
application.properties
; - Execute a aplicação.
O Webflux utiliza um modelo de programação reativa, permitindo lidar eficientemente com um grande número de requisições.
Essa abordagem escalável não requer a alocação de um thread para cada conexão, resultando em uma utilização mais eficiente dos recursos do sistema, especialmente em situações de alto tráfego.
As operações no Webflux são assíncronas e não bloqueantes. Isso significa que a thread não fica bloqueada enquanto espera a resposta de uma operação de I/O.
A liberação da thread para lidar com outras tarefas durante a espera aumenta a capacidade de resposta da aplicação.
O Webflux suporta programação funcional, permitindo escrever código de maneira mais concisa e expressiva.
Essa característica facilita o desenvolvimento e a manutenção da aplicação.
A Clean Architecture separa as responsabilidades da aplicação em diferentes camadas, tornando o código mais modular e fácil de entender. Isso facilita a manutenção e evolução da aplicação ao longo do tempo.
As camadas da Clean Architecture são independentes de qualquer tecnologia ou framework específico.
Isso possibilita a reutilização em diferentes contextos sem modificar a lógica interna, tornando a aplicação mais flexível e fácil de adaptar a novos requisitos e tecnologias.
A separação de responsabilidades e a clara definição das interfaces entre as camadas facilitam a escrita de testes automatizados para cada componente da aplicação.
Isso contribui para garantir a qualidade e robustez da aplicação, permitindo detectar e corrigir problemas de forma rápida e eficiente.