# Definição arquitetural do projeto
# Histórico de revisões
Data | Versão | Descrição | Autor(es) |
---|---|---|---|
31/08/2021 | 1.0 | Adição da introdução e Representação da arquitetura | Elias Bernardo (opens new window), Guilherme Guy (opens new window) |
31/08/2021 | 1.1 | Adição das especificações arquiteturais do frontend | Guilherme Deusdará (opens new window), Alexandre Miguel (opens new window) |
# Introdução
# Finalidade
A intenção desse documento é documentar e transmitir informações relevantes ao projeto da Cartografia Social do ponto de vista arquitetural. Facilitando a visualização e entendimento da estrutura do projeto.
# Escopo
Este Documento de Arquitetura de Software se aplica ao Sistema Cartografia Social. Desenvolvido na disciplina de EPS da Universidade de Brasília.
# Definições, Acrônimos e Abreviações
- UnB - Universidade de Brasília
- FGA - Faculdade do Gama
- Backend - Parte do sistema responsável por prover e organizar recursos para a interfáce do sistema
- Frontend - Parte do sistema responsável por ser a interfáce entre o sistema e o usuário
- HTTP - Hypertext Transfer Protocol
- API - Application Programming Interface
# Representação da Arquitetura
# Componentes Importantes
NestJs:
O NestJS é uma framework que permite construir aplicações de servidor de forma escalável e eficiente, utilizando o Node.js. Por causa do TypeScript a framework consegue lidar com uma combinação elementos dos paradigmas de programação orientado a objetos e também do paradigma funcional. Foi escolhido por ser fortemente tipado e incluir uma série de implementações e ferramentas para auxiliar o desenvolvimento.
RabbitMQ:
RabbitMQ é um message broker de código aberto escrito em earlang. Foi escolhido como Provider para a comunicação entre a API Gateway e os microsserviços, de forma a garantir a independência e desacoplamento entre eles.
React Native
O React Native (opens new window) é um framework para o desenvolvimento de aplicativos mobile tanto em iOS quanto em Android, utilizando componentes nativos. Esse framework é baseado em React (opens new window), uma biblioteca consolidada para desenvolvimento de interfaces de usuário web (EISENMAN, 2015).
Foi escolhido por permitir um compartilhamento de código para a execução das diferentes plataformas mobile presentes no mercado. Dentre os pacotes que serão utilizados para o desenvolvimento do aplicativo, será utilizada uma biblioteca de para gerenciamento de estado global, o Redux, fazendo o papel de armazenar o estado da aplicação, contendo dados do usuário, áreas demarcadas e demais informações inseridas.
Microserviços:
A arquitetura de microsserviços é uma solução arquitetural distribuída que desmembra o sistema da aplicação em pequenos blocos independentes, chamados de serviços. Cada um possuíndo seus próprios processos e responsabilidades, e se comunicam com o API Gateway através de um message broker utilizando o RabbitMQ. Os serviços utilizados na aplicação serão:
- Usuário, serviço responsável por conter as lógicas de autenticação e armazenar as informações dos usuários.
- Comunidade, serviço responsável por tratar toda a lógica que envolve uma comunidade e as permissões de acesso. Desenvolvido utilizando NestJS.
- Mapa, serviço responsável por conter as informações a respeito dos mapas, pontos, áreas e relativos. Desenvolvido utilizando NEstJS.
- Mídia, serviço responsável por gerenciar os arquivos de multimídia fornecidos pelos usuários da aplicação
Comunicação entre serviços:
A comunicação entre os serviços será realizada através da API Gateway, responsável por utilizar o protocolo HTTP para intermediar a comunicação com o front end (aplicação mobile React Native) e um message broker com RabbitMQ para comunicação com os microsserviços.
# Diagrama de Arquitetura
# Diagrama de Arquitetura do React native
# Modelo de dados
O projeto utiliza um banco de dados não relacional - MongoDB, logo, não há MER ou DER. Contudo, a representação esquemática do Banco de dados pode ser vista conforme abaixo:
Referências:
- EISENMAN, Bonnie. Learning react native: Building native mobile apps with JavaScript. " O'Reilly Media, Inc.", 2015.
- Documentação do React Native - https://reactnative.dev/docs/tutorial
- Documentação do NestJS - https://docs.nestjs.com/
- Definição de Funcionamento do RabbitMQ - https://www.cloudamqp.com/blog/part1-rabbitmq-for-beginners-what-is-rabbitmq.html