Home | Escopo e Cronograma | Processo | Design/Mockups | Configuração | Arquitetura | Código | BD | Qualidade | Utilização |
---|
Arquitetura do Sistema
Descrição
Esta seção irá abordar a arquitetura selecionada para o Backend e Frontend, além dos dados relativos ao deploy.
Sumário
Arquitetura Geral da Aplicação
A modelagem da arquitetura geral da aplicação foi pensada no C4 model.
Nível 1: Diagrama de contexto do sistema
Nível 2: Diagrama de contêineres
Deploy
Recipes API
TBD
Diagrama de Deploy
TBD
Backend
Definições de Tecnologias
- Linguagem: Java
- Framework: Spring Boot
Na sprint 0, foi feito um questionário com o time para quantificar o conhecimento dos alunos em linguagem, frameworks e bancos de dados para determinar quais as tecnologias que seriam utilizadas de acordo com o conhecimento geral do time. Com base no questionário e em discussões com o time, foi definido utilizar o spring boot para o desenvolvimento do backend da aplicação.
É uma API RESTful construída utilizando Spring Boot. Para a documentação e teste dos endpoints da aplicação, foi utilizado o Swagger. Para a estruturação da aplicação, utilizamos o Layers Pattern (padrão camadas). Contendo três camadas:
-
Presentation layer: fornece os endpoints da aplicação. Possui o controller, Data Transfer Objects (DTOs) e entidades.
-
Business logic layer: possui toda a lógica da aplicação, como cálculos, transformações de dados e processamento de dados. Está presente no pacote service.
-
Data access layer: fornece toda a comunicação com o banco de dados, criando, buscando, atualizando e deletando dados do banco. Na nossa aplicação esta camada está presente no pacote repository.
Módulos do Sistema
-
config: contém as configurações de cors e do Swagger.
-
controller: é o ponto de entrada do backend, onde ficam definidos os endpoints da aplicação, ou seja, os caminhos após o endereço do servidor como
/user
e qual o tipo de chamada o endereço irá receberGET
,POST
,PUT
ouDELETE
. -
dto: possui os objetos utilizados para transportar dados entre as camadas.
-
entity: possui os mapeamentos para a tabela do banco de dados.
-
enums : possui as enumerações utilizadas nas
DTOS
ou entidades. -
message: centraliza todas as mensagens que são enviadas ao frontend.
-
repository: centraliza toda a comunicação com o banco de dados, passando os parâmetros adequados para as funções desejadas.
-
security: define configurações de acesso aos endpoints e a autenticação de usuários cadastrados.
-
service: centraliza todas as nossas regras de negócio, utilizando o
repository
para fornecer os dados do banco e realizar as validações. -
util: possui classes que tem métodos que são utilizados em diversos services, como por exemplo, o Validations.java, que contém validações de campos de um objeto. Nessa camada também ficam as exceptions personalizadas e os handlers dessas exceptions.
Diagrama de Fluxo
As camadas da aplicação se comunicam da seguinte maneira, um fluxo de dados inicia com a requisição do usuário na camada Controller, que encaminha os dados para o Service onde são chamados os métodos do Repository, nele ocorre as ações com o banco como SELECT, INSERT, UPDATE e DELETE.
Frontend
Definições de Tecnologias
Utilizamos o Framework React Native que aborda a interface como uma função, e representa o estado atual da aplicação, apresentando componentes visuais escritos em Typescript que podem ser reutilizados em diferentes telas. O Expo permite criar aplicações nativas tanto para Android quanto para iOS.
Módulos do Sistema
-
Assets: Pasta com as mídias (imagens, logos, etc...) que são utilizadas na aplicação e no build
-
Components: Onde estarão localizados os componentes visuais encontrados em diferentes páginas da aplicação. Os componentes em sua maioria são genéricos e podem ser personalizados dependendo da sua utilização em cada Screen
-
Screen: Telas da aplicação. Cada tela é composta de diversos componentes que quando juntos apresentam funcionalidades da aplicação.
-
Routes: Rotas da aplicação. Determinam quais telas utilizam as diferentes formas de navegação: StackNavigator (navegação em telas empilhadas) e TabNavigator (navegação por abas inferiores)
-
Services: Interface do usuário na aplicação. Permite guardar as informações em memória para serem usadas pelo backend como dados e API
-
Utils: Funções que são chamadas em diferentes componentes, como validações de inputs