Skip to content

GitLab

  • Menu
Projects Groups Snippets
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
  • A ALFA 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
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • ALFA
  • ALFA Wiki
  • Wiki
  • Arquitetura

Last edited by Marcelo Henrique De Souza Nov 17, 2021
Page history
This is an old version of this page. You can view the most recent version or browse the history.

Arquitetura

Home Escopo e Cronograma Processo Design/Mockups Configuração Arquitetura Código BD Qualidade Utilização Padrão Merge Request

Tecnologias

Spring Boot (Backend)

Spring Boot é uma microestrutura de código aberto mantida por uma empresa chamada Pivotal. Ele fornece aos desenvolvedores Java uma plataforma para começar a usar um aplicativo Spring de nível de produção configurável automaticamente. Com ele, os desenvolvedores podem começar rapidamente sem perder tempo na preparação e configuração de seu aplicativo Spring. No contexto do projeto Alpha foi escolhido como a tecnologia a ser usada para o desenvolvimento do backend.

Vue.js (Frontend)

Vue.js é uma biblioteca para construir interfaces web interativas. O objetivo do Vue.js é fornecer os benefícios da vinculação de dados reativa e componentes de visualização combináveis ​​com uma API que seja o mais simples possível. No contexto do projeto Alpha foi escolhida como a tecnlogia a ser usada para o desenvolvimento do frontend.

PostgreSQL (Banco de Dados)

O PostgreSQL é um sistema de banco de dados relacional orientado a objetos poderoso e de código aberto, com mais de 30 anos de desenvolvimento ativo, que tem uma alta confiabilidade, robustez de recursos e desempenho. No contexto do projeto Alpha é a tecnologia escolhida para o banco de dados da aplicação.

Firebase Authentication (Autenticação)

O objetivo do Firebase Authentication é facilitar o desenvolvimento de um sistema de autenticação seguro, além de melhorar a experiência de login e integração para os usuários finais. Ele oferece uma solução de identidade completa, compatível com contas de e-mail/senha, autenticação por telefone, login do Google, Twitter, Facebook, GitHub e outros. No contexto do projeto Alpha foi escolhido como o provider de autenticação e autorização dos usuários cadastrados acessaram a aplicação.

Jenkins (Integração Contínua)

O Jenkins é uma ferramenta de automação de código aberto. Ajuda a automatizar as partes do desenvolvimento de software relacionadas à construção, teste e implantação, integração contínua e entrega contínua. No contexto do projeto Alpha foi escolhido é utilizado no pipeline de entrega continua junto ao Gitlab Runner para subida do código em produção na AWS.

Docker (Conteinerização)

Docker é um conjunto de produtos de plataforma como serviço (PaaS) que usam virtualização de nível de sistema operacional para entregar software em pacotes chamados contêineres. No contexto do projeto Alpha foi escolhido é ferramenta de conteinerização do artefatos que irão ser executados em maquinas EC2 no AWS.

Comunicação entre as tecnologias utilizadas

Modelo Arquitetural REST

Para o escopo deste projeto foi desenvolvido uma API REST. REST API é uma interface de programação de aplicativo (API ou API da web) que está em conformidade com as restrições do estilo de arquitetura REST e permite a interação com serviços da web, REST significa transferência de estado representacional. A aplicação em Vue serve como nosso cliente rest, responsavél por lidar com a requisições a serviço REST. O Serviço REST é a api desenvolvida com o Spring Boot onde são definidos os endpoints para a realização das requisições pelo cliente.

Definições do Modelo Arquitetural REST

  • Arquitetura cliente-servidor: A interface do usuário do site / aplicativo deve ser separada da solicitação / armazenamento de dados, para que cada parte possa ser dimensionada individualmente.

  • Statelessness: a comunicação deve ter no contexto do cliente armazenado no servidor. Isso significa que cada solicitação ao servidor deve ser feita com todos os dados necessários e nenhuma suposição deve ser feita se o servidor possui dados de solicitações anteriores.

  • Sistema em camadas: o cliente não deve saber se está se comunicando diretamente com o servidor ou com algum intermediário. Esses servidores intermediários (sejam proxy ou balanceadores de carga) permitem escalabilidade e segurança do servidor subjacente.

Fluxograma de chamadas da aplicação

Estrutura de Arquivos do Backend

alpha-backend/
└── src/
    ├── main/
    │   ├── java/
    │   │   └── br.com.alpha.api/
    │   │       ├── config/
    │   │       │   └── ExampleConfig.java
    │   │       ├── domain/
    │   │       │   └── Example.java
    │   │       ├── dto/
    │   │       │   ├── request/
    │   │       │   │   └── ExampleRequest.java
    │   │       │   └── response/
    │   │       │       └── ExampleResponse.java
    │   │       ├── repository/
    │   │       │   ├── ExampleRepository.java
    │   │       │   └── 
    │   │       ├── service/
    │   │       │   └── ExampleService.java
    │   │       ├── utils/
    │   │       │   └── ExampleUtil.java
    │   │       ├── web/
    │   │       │   ├── ExampleApi.java
    │   │       │   └── ExampleController.java
    │   │       └── AlphaApplication.java
    │   └── resources
    │       └── application.yml
    └── test/

config: Arquivos anotados com anotação @Configuration, para indicar as classes que serão usadas para configurações e definições de beans.

domain: Classes que descrevem o nosso modelo de domínio, sendo a representação visual de classes conceituais ou objetos do mundo real em um domínio de interesse.

dto: Response e Request, Classes javas para comunicação rest entre a backend e o front, afim de não expor as classes de domínios.

Repository: Interface JPA para comunicação com o banco de dados.

service: Classes responsáveis pela lógica de negócio.

web: Api e Controller, interface contendo as anotações de geração da documentação do Swagger, e Classe Controller, onde serão definidos os endpoints que serão nossa interface com o cliente (Vue.js).

resources: Recursos e configurações de propriedades da aplicação.

web
alpha-frontend/
├── public/
│   ├── favicon.ico
│   └── index.html
├── src/
│   ├── assets/
│   │   └── logo.png
│   ├── models/
│   │   └── example.js
│   ├── router/
│   │   └── index.js
│   ├── service/
│   │   └── example.service.js
│   ├── views/
│   │   └── example.vue
│   ├── App.js
│   └── main.js
├── .gitignore
├── README.md
├── babel.config.js
└── package.json

models: Modelos de request para requisições e de para response para respostas entre a comunicação rest do front com o backend.

router: Definição das rotas do cliente.

service: Definição da lógica para a chamada de um endpoint do backend de um determinado contexto especifico de um endpoint de uma controller.

Repository: Interface JPA para comunicação com o banco de dados.

service: Classes responsáveis pela lógica de negócio.

Clone repository
  • Arquitetura
  • Banco de Dados
  • Boas Práticas
  • C4 Model
  • Configuração
  • Escopo
  • Instruções
  • Mockups
  • POC Amazon
  • Padrão Merge Request
  • Processos
  • Home