-
Notifications
You must be signed in to change notification settings - Fork 1
Arquitetura do Sistema
O sistema Omini é concebido como uma aplicação web moderna, seguindo uma arquitetura multicamadas para garantir separação de responsabilidades, manutenibilidade e escalabilidade. A arquitetura visa suportar as funcionalidades de controle de estoque de materiais de laboratório de forma eficiente e robusta. As principais decisões arquiteturais foram tomadas com base nas tecnologias especificadas e nas boas práticas de desenvolvimento de software.
O sistema é dividido em duas grandes partes principais: o Backend, responsável pela lógica de negócios e persistência de dados, e o Frontend, responsável pela interface com o usuário e interação.
O backend do Omini é desenvolvido em Java 21, utilizando o framework Spring Boot 3.2 (com Jakarta EE 10). Essa escolha proporciona um ambiente de desenvolvimento produtivo, com um vasto ecossistema de bibliotecas e ferramentas, além de um modelo de programação robusto para a criação de APIs RESTful.
As camadas do backend podem ser descritas da seguinte forma:
-
Camada de Apresentação (API RESTful):
- Responsável por expor os serviços do sistema através de endpoints RESTful.
- Utiliza o Spring MVC para o mapeamento de requisições HTTP para os controladores.
- A documentação da API é gerada automaticamente utilizando SpringDoc OpenAPI 2 + Swagger UI, acessível em
http://localhost:8080/swagger-ui.html. - A segurança da API é gerenciada pelo Spring Security 6, com autenticação baseada em JSON Web Tokens (JWT) para proteger os endpoints e garantir que apenas usuários autenticados e autorizados possam acessar os recursos.
-
Camada de Serviço (Lógica de Negócios):
- Contém a lógica de negócios principal do sistema, orquestrando as operações e garantindo a integridade das regras de negócio.
- Os serviços são implementados como componentes Spring (
@Service) e são responsáveis por coordenar as interações entre os controladores e a camada de persistência. - Utiliza injeção de dependência para gerenciar os componentes e suas interações.
-
Camada de Persistência (Acesso a Dados):
- Responsável pela interação com o banco de dados.
- Utiliza Spring Data JPA em conjunto com Hibernate 6 como provedor JPA para o mapeamento objeto-relacional (ORM).
- Define repositórios (interfaces que estendem
JpaRepository) para abstrair as operações de CRUD (Create, Read, Update, Delete) e consultas customizadas ao banco de dados. - O pool de conexões com o banco de dados é gerenciado pelo HikariCP, conhecido por sua alta performance.
- As migrações de esquema do banco de dados (schema evolution) são gerenciadas pela ferramenta Flyway 9, garantindo que as alterações no modelo de dados sejam aplicadas de forma controlada e versionada.
-
Banco de Dados:
- O sistema foi projetado para utilizar o SQL Server 2019 ou 2022. Para facilitar o ambiente de desenvolvimento, recomenda-se a utilização de uma instância do SQL Server rodando via Docker.
-
Utilitários e Ferramentas Adicionais:
- Lombok: Utilizado para reduzir código boilerplate (getters, setters, construtores, etc.) nas classes de modelo e DTOs.
- MapStruct ou ModelMapper (opcional): Podem ser utilizados para facilitar o mapeamento entre DTOs (Data Transfer Objects) e entidades do domínio.
O frontend do Omini é desenvolvido como uma Single Page Application (SPA) utilizando React 18 com TypeScript. Essa combinação oferece uma experiência de usuário rica e interativa, além de tipagem estática para maior robustez do código.
Os principais componentes da arquitetura frontend são:
-
Framework/Biblioteca Principal:
- React 18: Biblioteca JavaScript para a construção de interfaces de usuário componentizadas.
- TypeScript: Superset do JavaScript que adiciona tipagem estática, melhorando a qualidade e a manutenibilidade do código.
-
Gerenciamento de Estado e Dados:
- React Query (TanStack Query): Utilizado para buscar, armazenar em cache, sincronizar e atualizar dados do servidor de forma eficiente. Facilita o gerenciamento de estados assíncronos e melhora a experiência do usuário ao lidar com dados da API.
-
Componentes de UI e Estilização:
- Material UI (MUI): Biblioteca de componentes React que implementa o Material Design do Google, fornecendo um conjunto rico de componentes de UI prontos para uso e customizáveis.
- Estilização customizada pode ser aplicada conforme necessário, utilizando as capacidades do Material UI ou outras abordagens como CSS Modules ou Styled Components (se decidido pela equipe).
-
Comunicação com o Backend:
-
Axios: Cliente HTTP baseado em Promises para realizar requisições à API RESTful do backend. Configurado para interagir com os endpoints em
http://localhost:8080/api.
-
Axios: Cliente HTTP baseado em Promises para realizar requisições à API RESTful do backend. Configurado para interagir com os endpoints em
-
Build e Desenvolvimento:
- Vite: Ferramenta de build moderna e rápida para projetos frontend, oferecendo um servidor de desenvolvimento com Hot Module Replacement (HMR) e otimizações para produção.
- O projeto frontend é gerenciado com npm (Node Package Manager).
A comunicação entre o backend e o frontend ocorre primariamente através de requisições HTTP, seguindo o padrão REST. O frontend envia requisições para os endpoints da API expostos pelo backend, e o backend responde com dados no formato JSON. A autenticação via JWT garante que as requisições sejam seguras.
O projeto prevê a utilização de GitHub Actions para a configuração de um pipeline de Integração Contínua e Entrega Contínua (CI/CD). Este pipeline pode incluir etapas como:
- Build do Backend: Compilação do código Java e empacotamento da aplicação (ex: JAR executável) utilizando Maven 3.9.
- Build do Frontend: Transpilação do TypeScript, bundling dos assets (JavaScript, CSS, imagens) utilizando Vite.
-
Execução de Testes:
- Backend: Testes unitários com JUnit 5 e Mockito. Testes de integração com Testcontainers para simular o ambiente de banco de dados.
- Frontend: Testes unitários e de componentes (ex: com Jest e React Testing Library).
- Análise Estática de Código: Ferramentas como SonarQube (se configurado) para garantir a qualidade do código.
- Empacotamento e Publicação de Artefatos: Criação de imagens Docker para o backend e frontend (se aplicável) e publicação em um registro de contêineres.
- Implantação: Automatização da implantação em ambientes de homologação ou produção.
O README do projeto menciona um pipeline Maven + Docker Compose via GitHub Actions, indicando uma abordagem de containerização para facilitar a implantação e o gerenciamento dos ambientes.
A arquitetura descrita visa fornecer uma base sólida para o desenvolvimento do Omini. Conforme o projeto evolui, novas decisões arquiteturais podem ser tomadas para atender a requisitos emergentes ou otimizar o desempenho e a manutenibilidade do sistema. A documentação da arquitetura deve ser mantida atualizada para refletir o estado atual do sistema.