Home | Escopo | Git Workflow | Design/Mockups | Configuração | Arquitetura | Gerência | Código | BD | Qualidade | Frontend | Backend | Analytics |
---|
Definições Arquitetura
Descrição
- Esta seção irá abordar a arquitetura da aplicação.
Sumário
Arquitetura do Sistema
-
Baseando-se no que foi planejado para o nosso banco de dados, levantamento dos requisitos e o entendimento geral do time sobre o projeto "giftreminder" a ser desenvolvido, optamos por uma arquitetura MVC (Model-View-Controller). Esta escolha foi motivada pela clareza e separação de responsabilidades que o MVC oferece, facilitando tanto o desenvolvimento quanto a manutenção do código. O "Model" gerencia os dados e a lógica do negócio, o "View" é responsável pela apresentação visual dos dados, e o "Controller" atua como um intermediário entre o Model e o View, gerenciando o fluxo de informações e as interações do usuário.
-
Utilizando a arquitetura MVC, podemos garantir uma maior organização do código, o que se traduz em uma manutenção e expansão mais eficientes do projeto. Além disso, esta abordagem promove uma melhor divisão de trabalho e especialização dentro da equipe, pois permite que desenvolvedores de diferentes áreas (back-end, front-end) concentrem seus esforços em partes específicas da aplicação sem interferir uns com os outros. Por fim, a integração com tecnologias de containerização, como demonstrado no diagrama de deploy, reforça a flexibilidade e escalabilidade do sistema, permitindo um gerenciamento mais eficaz dos recursos e uma adaptação rápida a diferentes ambientes de produção.
Deploy
- Texto
Diagrama de Deploy
- O diagrama apresenta o processo de deploy da aplicação Giftreminder utilizando a nuvem AWS.
Diagrama de Componentes
-
Para criar um eficiente para a aplicação "giftreminder", que ilustre claramente, podemos seguir a descrição a seguir, organizando os elementos conforme suas funções específicas:
-
Componentes de Usuário (User Interface Components)
-
Mobile App
- Função: Interface de usuário para interação com o sistema via dispositivos móveis.
- Responsabilidades: Enviar requisições e receber respostas do servidor.
- Plataformas Suportadas: Android, iOS.
-
Mobile App
-
Componentes de Servidor (Server-side Components)
-
Web Server (FastAPI)
- Função: Processamento de requisições HTTP dos aplicativos móveis.
- Responsabilidades: Gerenciar rotas, autenticação e autorização.
-
Application Logic (Controllers)
- Função: Gerenciamento da lógica de controle.
- Responsabilidades: Interagir com os modelos de dados para preparar e enviar dados aos usuários.
-
Models
- Função: Gerenciamento da camada de dados e lógica de negócios.
- Responsabilidades: Interação com o banco de dados para manipulação de informações.
-
Database (Postgres)
- Função: Armazenamento de dados persistentes.
- Responsabilidades: Gerenciado pela camada Model da aplicação.
-
Web Server (FastAPI)
-
Componentes de Infraestrutura
-
Docker Containers
- Função: Isolamento e gerenciamento de dependências.
- Responsabilidades: Cada componente do servidor (FastAPI, Gitlab Runner, Postgres) é implantado em um contêiner separado.
-
Gitlab Runner
- Função: Automação de CI/CD.
- Responsabilidades: Automatizar atualizações e testes do código.
-
AWS EC2
- Função: Hospedagem dos contêineres Docker.
- Responsabilidades: Fornecer recursos computacionais.
-
AWS S3
- Função: Armazenamento para dados estáticos ou backups.
- Responsabilidades: Integrar-se com a aplicação para armazenamento de dados não-relacionais.
-
Docker Containers
-
Componentes de Comunicação
-
API Gateway (FastAPI)
- Função: Ponto único de entrada para as requisições.
- Responsabilidades: Roteamento de requisições para os componentes internos apropriados e gerenciamento de respostas.
-
API Gateway (FastAPI)
Definições de Tecnologias
- Texto
Frontend
- Texto
Backend
-Texto
Módulos do Sistema
-
Frontend:
-
Estrutura Principal
-
.expo
: Configurações específicas para projetos usando Expo. -
.vscode
: Configurações para o editor VS Code, como extensões recomendadas e configurações específicas do projeto. -
node_modules
: Bibliotecas e dependências do projeto instaladas via npm ou yarn. -
src
: Diretório principal onde o código-fonte do front-end está organizado.
-
-
Dentro do diretório src
-
app
: Contém os módulos principais da aplicação. -
assets
: Recursos estáticos como imagens, vídeos ou arquivos de som. -
components
: Componentes reutilizáveis usados em várias partes do aplicativo. -
constants
: Constantes utilizadas ao longo do projeto, como cores, strings, etc. -
controllers
: Lógica para manipular a interação entre a UI e o modelo de dados. -
DTOs (Data Transfer Objects)
: Objetos usados para transferir dados entre processos, tipicamente entre o cliente e o servidor. -
hooks
: Hooks personalizados do React utilizados no projeto. -
services
: Serviços para gerenciar a lógica de negócios e as interações com APIs externas.
-
-
Arquivos de Configuração e Scripts
-
app.json
: Configurações específicas para o Expo e outras informações do app. -
eas.json
: Configurações para o serviço de build e submissão do Expo. -
expo-env.d.ts
: Definições de tipo para as variáveis de ambiente usadas com Expo. -
package.json
&package-lock.json
: Gerenciam as dependências do projeto e garantem uma instalação consistente das mesmas. -
tsconfig.json
: Configurações do TypeScript para o projeto.
-
-
-
Backend:
-
Estrutura Principal
-
app
: Diretório principal do projeto onde estão localizados os principais módulos e componentes do back-end.
-
-
Dentro do diretório APP:
-
controllers
: Contém os controladores que gerenciam as operações de entrada e saída de dados, funcionando como intermediários entre os modelos e as visualizações. -
dependencies
: Gerencia as dependências que são necessárias para os controladores, facilitando a injeção de dependências e a configuração do serviço. -
helpers
: Funções auxiliares que fornecem funcionalidades comuns que podem ser utilizadas em várias partes da aplicação. -
models
: Define os modelos de dados que a aplicação utiliza, geralmente correspondendo às tabelas no banco de dados. -
routes
: Gerencia as rotas da aplicação, mapeando as URLs às funções dos controladores que devem responder às solicitações. -
__init__.py
: Arquivo que transforma o diretório em um pacote Python, permitindo sua importação em outras partes do código. -
main.py
: Ponto de entrada da aplicação quando ela é executada como um módulo ou pacote Python. -
migrate.py
: Script para gerenciar as migrações de banco de dados, facilitando a atualização e manutenção do esquema do banco de dados. -
settings.py
: Contém configurações globais da aplicação, como conexão com banco de dados, configurações de segurança, entre outros.
-
-
Outros Diretórios e Arquivos
-
venv
: Diretório que contém o ambiente virtual Python para o projeto, isolando as dependências. -
docker-compose.yml
: Define e configura serviços relacionados, volumes e redes utilizando o Docker Compose. -
Dockerfile
: Script para criar uma imagem Docker do projeto. -
requirements.txt
: Lista todas as bibliotecas Python necessárias para o projeto.
-
-