Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • W Wiki
  • Project information
    • Project information
    • Activity
    • Labels
    • Planning hierarchy
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 0
    • Issues 0
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 0
    • Merge requests 0
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Monitor
    • Monitor
    • Incidents
  • Packages & Registries
    • Packages & Registries
    • Package Registry
    • Infrastructure Registry
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • GiftReminder
  • Wiki
  • Wiki
  • arquitetura

Last edited by Leonardo Vargas Soares Jul 09, 2024
Page history

arquitetura

Home Escopo Git Workflow Design/Mockups Configuração Arquitetura Gerência BD Qualidade

Definições Arquitetura

Descrição

  • Esta seção irá abordar a arquitetura da aplicação.

Sumário

  • Arquitetura do Sistema
  • Deploy
    • Diagrama de Deploy
    • Diagrama de Componentes
  • Definições de Tecnologias
    • Frontend
    • Backend
  • Módulos do Sistema

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

  • O deploy é o processo de disponibilizar uma aplicação concluída para uso. Esse processo pode ser realizado em diversas fases do projeto, assim como após sua finalização. Utilizamos a plataforma de computação em nuvem Amazon EC2 para hospedar o GitLab Runner, que gerencia a execução das pipelines do projeto. Além disso, utilizamos o AWS S3 para armazenar as imagens relacionadas ao projeto.

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

Definições de Tecnologias

  • Logo abaixo todas as tecnologias e linguagens de programação utilizadas no projeto.

Frontend

  • Repositório: https://tools.ages.pucrs.br/giftreminder/front-end

  • React Native: Framework para desenvolvimento de aplicativos móveis usando JavaScript, permitindo que um único conjunto de código funcione tanto em iOS quanto em Android. Referência

  • TypeScript: Linguagem de programação que estende JavaScript adicionando tipos estáticos, o que ajuda a detectar erros em tempo de desenvolvimento, melhorando a manutenção do código. Referência

  • Expo: Plataforma que oferece um conjunto de ferramentas e serviços construídos em torno de React Native para ajudar a desenvolver, construir, implantar e rapidamente iterar em aplicativos iOS, Android e web a partir da mesma base de código JavaScript/TypeScript. Referência

  • JavaScript: Uma linguagem de programação versátil usada principalmente para criar interatividade em sites e aplicações web. Referência

  • Docker: Plataforma que usa contêinerização para facilitar o desenvolvimento, o teste e a implantação de aplicações, garantindo que elas funcionem da mesma maneira em diferentes ambientes. Referência

  • HTML/CSS: HTML é usado para estruturar o conteúdo na web, e CSS é usado para controlar a apresentação, formatação e layout. Referência

  • Redux: Biblioteca para gerenciamento de estado em aplicações JavaScript, muito usada com React para construir interfaces de usuário previsíveis. Referência

  • React Navigation: Biblioteca para lidar com navegação e transição entre as telas em aplicativos usando React Native ou React. Referência

  • Styled-components: Biblioteca que permite usar estilos em nível de componente em aplicações React e React Native, usando tagged template literals para estilizar os componentes. Referência

Backend

  • Repositório: https://tools.ages.pucrs.br/giftreminder/back-end

  • Python: Linguagem de programação de alto nível, interpretada e de script, conhecida por sua legibilidade de código e suporte a múltiplos paradigmas de programação. É popular em diversos campos, como web, automação, análise de dados e aprendizado de máquina. Referência

  • TypeScript: Linguagem de programação que estende JavaScript adicionando tipos estáticos, o que ajuda a detectar erros em tempo de desenvolvimento, melhorando a manutenção do código. É amplamente usada em projetos que exigem maior escalabilidade e manutenção. Referência

  • FastAPI: Framework moderno e rápido para construir APIs com Python, baseado em Starlette para as partes de roteamento e Pydantic para a validação de dados. É projetado para ser fácil de usar e intuitivo, enquanto fornece altos níveis de desempenho. Referência

  • Postgres (PostgreSQL): Sistema de gerenciamento de banco de dados relacional robusto e de código aberto, conhecido por sua confiabilidade, flexibilidade e suporte a recursos avançados, como consultas complexas e transações atômicas. Referência

  • Docker: Plataforma que usa contêinerização para facilitar o desenvolvimento, o teste e a implantação de aplicações, garantindo que elas funcionem da mesma maneira em diferentes ambientes. É essencial para a criação de ambientes isolados e portáteis. Referência

  • Virtual Environment (venv): Ferramenta para criar ambientes Python isolados. Cada ambiente virtual pode ter suas próprias dependências e versões de pacotes, permitindo que projetos diferentes rodem em uma mesma máquina sem conflitos. Referência

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.
Clone repository
  • Banco de Dados
  • Configuracao
  • Design_Mockups
  • Git Workflow
  • arquitetura
  • escopo
  • gerencia
  • Home
  • qualidade