Arquitetura do Sistema
Descrição
Esta seção irá abordar a arquitetura selecionada para o Backend e Frontend explicando os motivos das escolhas das tecnologias utilizadas junto ao funcionamento da aplicação.
Sumário
Tecnologias
O time realizou um debate para mapear os conhecimentos tecnológicos de todos os integrantes da equipe para facilitar e nortear as decisões sobre as tecnologias a serem usadas no desenvolvimento da aplicação levando em consideração o tempo de entrega, conhecimentos existentes de cada integrante da equipe e conhecimentos que gostaríamos de adquirir durante o desenvolvimento. Após realizar esse levantamento, optamos por trabalhar com as tecnologias citas abaixo:
React
React é uma biblioteca JavaScript de código aberto mantida pelo Facebook, focada no desenvolvimento de interfaces de usuário (UI). Ela promove a construção de interfaces de usuário por meio de componentes reutilizáveis, que encapsulam a lógica e a aparência de partes específicas da UI. Utiliza um conceito de Virtual DOM para melhorar o desempenho, minimizando as manipulações diretas do DOM do navegador. Isso resulta em atualizações mais eficientes e rápidas da interface do usuário.
A escolha de React foi baseada em três pontos:
- Conhecimento prévio de alguns membros da equipe referente a tecnologia;
- Necessidade por parte dos stakeholders para aplicativos nativos para o plataforma web;
- Pesquisa realizada com o time para descobrir conhecimentos que gostaríamos de adquirir.
TypeScript
Com a adição de TypeScript, React se beneficia das vantagens da tipagem estática opcional. TypeScript é um superset tipado de JavaScript que oferece melhorias significativas na detecção de erros durante o desenvolvimento. Ao usar TypeScript com React, é possível melhorar a detecção de erros, definindo tipos para props, estado e outros elementos do React. Isso ajuda a capturar erros de digitação e de lógica mais cedo no processo de desenvolvimento, tornando o código mais robusto e menos propenso a erros.
Além disso, TypeScript permite a geração automática de documentação, facilitando a compreensão do código para os membros da equipe. Ele também torna a refatoração mais segura, já que o compilador pode identificar automaticamente onde os tipos foram alterados e quais partes do código precisam ser ajustadas. A integração do TypeScript com ferramentas de desenvolvimento, como IDEs, editores de código e sistemas de construção, proporciona uma experiência de desenvolvimento mais robusta e eficiente. Ao combinar React com TypeScript, os desenvolvedores podem aproveitar ao máximo as vantagens da tipagem estática enquanto desenvolvem interfaces de usuário modernas e dinâmicas na web.
A escolha de TypeScript foi baseada em quatro pontos:
- Tipagem Estática Opcional;
- Documentação Automática a partir da tipagem;
- Detecção Antecipada de Erros;
- Refatoração Segura
Java Spring Boot
O Spring Framework é um dos frameworks mais populares e abrangentes para o desenvolvimento de aplicativos Java. Ele fornece um conjunto de recursos abrangente para desenvolver aplicativos empresariais robustos e escaláveis. O Spring Boot é uma extensão do Spring Framework que simplifica significativamente o processo de desenvolvimento de aplicativos Java, oferecendo configurações padrão e convenções de projeto para uma rápida configuração e implantação de aplicativos.
A escolha do Java Spring Boot foi baseada em quatro pontos:
- Convenções de Configuração
- Autoconfiguração do projeto
- Spring Boot Starter (Conjunto de dependências pré-configuradas que facilita a inclusão de recursos adicionais em um aplicativo Spring Boot)
- Facilidade de implantação com servidor web embutido.
PostgreSQL
O PostgreSQL é um sistema de gerenciamento de banco de dados relacional (RDBMS) de código aberto amplamente utilizado em uma variedade de aplicativos e cenários. Ele foi desenvolvido inicialmente como um projeto de pesquisa na Universidade da Califórnia, Berkeley, e desde então cresceu para se tornar uma das opções mais populares e confiáveis para armazenamento de dados.
A escolha do PostgreSQL foi baseada em três pontos:
- Padrão SQL e Modelo Relacional
- Transações ACID (Atomicidade, Consistência, Isolamento e Durabilidade)
- Extensibilidade com suporte a criação de funções e procedimentos armazenados em várias linguagens de programação
Firebase
Firebase é uma plataforma desenvolvida pelo Google para a criação de aplicativos móveis e da web de uma forma efetiva, rápida e simples. Ele contém diversas funcionalidades já desenvolvidas, incluindo um serviço de autenticação e oferece uma SDK para Java que inclui suporte para essa autenticação de usuários. Com essa SDK iremos implementar facilmente este recurso.
A escolha do Firebase foi baseada em quatro pontos:
- Sistema de Autenticação Completo;
- Gerenciamento de Usuários;
- Segurança Integrada;
- Fácil Integração.
Padrão Arquitetural Back-End
Camada de Apresentação: A camada de apresentação lida com a interação do usuário e a exibição dos dados. No contexto do Spring Boot, é implementado usando controladores MVC (Model-View-Controller). Os controladores recebem solicitações HTTP, processam essas solicitações, interagem com a camada de serviço para realizar operações de negócios e retornam uma resposta adequada para o cliente. Os controladores podem ser anotados com @RestController para expor endpoints RESTful ou @Controller para páginas da web.
Camada de Lógica de Negócios: A camada de lógica de negócios contém a lógica de aplicação que implementa as regras de negócios do aplicativo. No Spring Boot, é implementado usando serviços, que são componentes que encapsulam a lógica de negócios e são injetados nos controladores ou outros serviços conforme necessário. Os serviços podem ser anotados com @Service para indicar que são beans de serviço gerenciados pelo Spring.
Camada de Acesso a Dados: A camada de acesso a dados lida com a persistência e recuperação dos dados do aplicativo em um banco de dados ou outro sistema de armazenamento. No Spring Boot, é implementado usando repositórios, que são interfaces que estendem interfaces fornecidas pelo Spring. Esses repositórios fornecem métodos para realizar operações de CRUD (Create, Read, Update, Delete) no banco de dados de forma fácil e eficiente.
![blockchain](uploads/3657b987670e57cbcee69fd5e921f194/blockchain.drawio.png)