Arquitetura do Sistema
Diagrama de Deploy
Diagrama de Componentes
Modelo da Arquitetura usada no Front-end
Para a arquitetura de desenvolvimento do Front-end da aplicação, foram criadas as seguintes pastas:
modules: Essa pasta contém todas as dependências do projeto, instaladas via npm ou yarn. Essas bibliotecas são necessárias para o funcionamento do projeto.
public: Essa pasta armazena arquivos estáticos, como imagens e fontes.
src: Pasta com o código-fonte principal do projeto. Dentro dela, a pasta app organiza outras pastas de acordo com diferentes responsabilidades:
-
@types: Usada para definir tipos TypeScript personalizados ou declarações de tipos para bibliotecas que não têm definições de tipos embutidas.
-
api: Ficam as chamadas e configurações de APIs, incluindo funções para comunicar-se com backends ou serviços externos.
-
data: Usada para armazenar dados brutos ou constantes que podem ser usados em toda a aplicação. Isso pode incluir arquivos JSON ou outras formas de dados estruturados.
-
theme: Armazena arquivos relacionados ao tema da aplicação, como configurações de cores, tipografia e outros estilos globais.
-
presentation: Esta pasta organiza os componentes de apresentação, ou seja, as partes da interface de usuário (UI). Dentro dela:
5.1. components: Ficam os componentes reutilizáveis da UI, como botões, formulários, modais, etc.
5.2. hooks: Código para adaptar a mesma página para diferentes tamanhos de tela, tornando a interface mais flexível e responsiva.
5.3. pages: Representam as diferentes páginas da aplicação. Cada arquivo dentro dela se torna uma rota da aplicação.
Modelo da Arquitetura usada no Back-end
Para a arquitetura de desenvolvimento do Back-end da aplicação, foram criadas as seguintes pastas:
- domain: A camada de domínio contém a lógica de negócios pura, focada em representar conceitos centrais da aplicação sem dependências de tecnologias externas. As pastas dentro dela estão organizadas da seguinte forma:
1.1. entities: Aqui ficam as entidades principais do domínio. Elas são representações dos objetos de negócios e definem a estrutura e comportamento dos dados essenciais da aplicação. As entidades não contêm lógica técnica de persistência, apenas lógica de negócios. Exemplo: classes que representam usuários, produtos, etc.
1.2. Enum: Objetos de valor são conceitos do domínio que são imutáveis e comparados pelo valor. Eles não têm identidade própria, ou seja, se dois objetos têm os mesmos valores, são considerados iguais. São usados para representar conceitos que não mudam ao longo do tempo.
1.3. repositories: Nesta pasta ficam as interfaces que representam abstrações para o acesso e manipulação de dados. Elas permitem interagir com fontes de dados sem acoplar a lógica de negócios à infraestrutura. São implementadas na camada de infraestrutura.
2. application: A camada de aplicação é responsável por coordenar e orquestrar as operações do sistema, garantindo que os casos de uso sejam executados de acordo com as regras de negócio definidas na camada de domínio. As subpastas incluem:
2.1. dtos: Data Transfer Objects (DTOs) são usados para transferir dados entre diferentes camadas ou sistemas. Eles são representações simplificadas de entidades, voltadas para a comunicação, especialmente entre o back-end e o front-end.
2.2. services: Os serviços da aplicação contêm a lógica para coordenar os casos de uso do sistema. Eles são responsáveis por implementar os fluxos de trabalho da aplicação, garantindo a execução correta das operações de negócio.
3. infrastructure: A camada de infraestrutura cuida dos detalhes técnicos, como persistência de dados, autenticação e configurações de integração com sistemas externos. As pastas são organizadas da seguinte maneira:
3.1. persistence: Aqui ficam as implementações de persistência de dados. Dentro dela:
3.1.1. jpa: Contém classes e configurações específicas do JPA (Java Persistence API), incluindo as entidades JPA que são mapeadas para as tabelas do banco de dados.
3.1.2. repositories: Aqui ficam as implementações das interfaces de repositório definidas na camada de domínio. Essas implementações conectam-se ao banco de dados ou outros sistemas de armazenamento para manipular dados.
3.2. security: Essa pasta contém as classes e configurações relacionadas à segurança da aplicação, como o controle de autenticação e autorização via JWT (JSON Web Token).
3.3. config: Contém arquivos e classes que centralizam as configurações gerais da aplicação, como integrações, mapeamentos automáticos e documentação da API.
4. presentation: A camada de apresentação é responsável pela interação entre o usuário e o sistema, geralmente por meio de controladores REST que expõem os endpoints da aplicação. É organizada da seguinte forma:
4.1. controllers:
Ficam os controladores que lidam com as requisições HTTP recebidas da interface do usuário ou de sistemas externos. Eles chamam os serviços da camada de aplicação e retornam os dados apropriados em formato JSON.
Application.java: É a classe principal da aplicação, responsável por inicializar o Spring Boot e configurar o ambiente de execução.