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
- Tecnologias
- Modelo Arquitetural
- Estrutura de Arquivos do Backend
- Estrutura de Arquivos do Frontend
- Diagrama comunicação entre pacotes
- Diagrama de deploy
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 Amparo foi escolhido como a tecnologia a ser usada para o desenvolvimento do backend.
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 Amparo é a tecnologia escolhida para o banco de dados da aplicação.
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 Amparo foi escolhido é ferramenta de conteinerização do artefatos que irão ser executados em maquinas EC2 no AWS.
React.js (Frontend)
O React (também denominado React.js ou ReactJS) é uma biblioteca front-end JavaScript de código aberto com foco em criar interfaces de usuário em páginas web. No contexto do projeto Amparo foi escolhido como a tecnologia a ser usada para o desenvolvimento do frontend.
GitLab
O GitLab é um gerenciador de repositório de software baseado em git, com suporte a Wiki, gerenciamento de tarefas e CI/CD. GitLab é similar ao GitHub, mas o GitLab permite que os desenvolvedores armazenem o código em seus próprios servidores, ao invés de servidores de terceiros.
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 React 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 em alto nível de chamadas de uma API REST
Estrutura de Arquivos do Backend
Estrutura de Arquivos do Backend
amparo-backend/
└── src/
├── main/
│ ├── java/
│ │ └── br.com.amparo.web/
│ │ ├── web/
│ │ │ ├── controller/
│ │ │ │ └── ExampleController.ja
│ │ │ └── ExampleApi.java
│ │ ├── config/
│ │ │ └── ExampleConfig.java
│ │ ├── dto/
│ │ │ └── ExampleDto.java
│ │ ├── exception/
│ │ │ └── ExampleException.java
│ │ ├── handler/
│ │ │ └── ExampleHandler.java
│ │ ├── mapper/
│ │ │ └── ExampleMapper.java
│ │ ├── model/
│ │ │ ├── entity/
│ │ │ │ └── ExampleEntity.ja
│ │ │ └── enumeration/
│ │ │ └── enum.java
│ │ ├── repository/
│ │ │ └── ExampleRepository.java
│ │ ├── service/
│ │ │ ├── ExampleService.java
│ │ │ └── impl/
│ │ │ └── ExampleServiceImpl.java
│ │ ├── validator/
│ │ │ ├── ExampleValidator.java
│ │ │ └──
│ └── resources
│ └── application.yml
└── test/
Explicativo dos diretórios do backend
web: Impelementação dos endpoints da aplicação, no direitorio controller estão os contratos do endpoints que possuem as anotações do swagger para documentação da api no código.
config: Arquivos anotados com anotação @Configuration, para indicar as classes que serão usadas para configurações e definições de beans.
dto: Classes java para comunicação rest entre a backend e o front, com a finalidade de não expor as classes de domínios.
exception: Classes customizadas para lançamento de exceção.
handler: Classe responsável por lidar e formatar as exceções lançadas no backened para melhor entendimento do erro no frontend.
model: 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, também representam as entidades da modelagem do banco de dados.
Repository: Interface JPA para comunicação com o banco de dados.
service: Classes responsáveis pela lógica de negócio.
validator: Classes com o intuito de validar os dados das requisições que vem do cliente.
resources: Recursos e configurações de propriedades da aplicação.
Frontend
Definições de Tecnologias
TBD
Módulos do Sistema
TBD
Diagramas de Componentes
TBD
Diagrama do Sistema
TBD