Skip to content

Arquitetura do Sistema

Lucas de Oliveira Mota edited this page May 14, 2025 · 1 revision

Arquitetura do Sistema Omini

Introdução à Arquitetura

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.

Arquitetura do Backend

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.

Arquitetura do Frontend

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

Comunicação entre Backend e Frontend

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.

Build e Implantação (CI/CD)

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.

Considerações Adicionais

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.

Clone this wiki locally