|
|
# Backend
|
|
|
|
|
|
Esta página centraliza informações sobre o [repositório Backend do projeto Sem Barreiras](https://tools.ages.pucrs.br/sem-barreiras/sembarreiras-backend).
|
|
|
|
|
|
## Sumário
|
|
|
|
|
|
* [Escolha de tecnologias](#escolha-de-tecnologias)
|
|
|
* [Organização do repositório](#organizacao-do-repositorio)
|
|
|
* [Padrões de código](#padroes-de-codigo)
|
|
|
* [Nomenclatura de classes](#nomenclatura-de-classes)
|
|
|
* [Nomenclatura de variáveis](#nomenclatura-de-variaveis)
|
|
|
* [Nomenclatura de métodos](#nomenclatura-de-metodos)
|
|
|
* [Padrões das APIs REST](#padroes-das-apis-rest)
|
|
|
* [Checkstyle](#checkstyle)
|
|
|
* [Tratamento de exceções](#tratamento-de-excecoes)
|
|
|
* [Validação de parâmetros das requisições](#validacao-de-parametros-das-requisicoes)
|
|
|
* [Documentação do Swagger](#documentacao-do-swagger)
|
|
|
|
|
|
## Escolha de tecnologias
|
|
|
|
|
|
Conforme mencionado na página de configuração de ambiente da Wiki, como tecnologias de Backend foram selecionadas a linguagem Java, junto ao framework Spring Boot, para o desenvolvimento da API, e o banco de dados PostgreSQL.
|
|
|
|
|
|
Esta decisão foi tomada com base em dois momentos. Em um primeiro momento, na primeira semana da Sprint 0, cada integrante citou as tecnologias com as quais tinha experiência e com qual *stack* tinha mais interesse em trabalhar (Frontend ou Backend) ao se apresentar. Este levantamento demonstrou que, existiria uma curva de aprendizado menor por grande parte do time já ter utilizado ou visto códigos em Java Spring Boot. Além disso, o Java quanto possue frameworks conhecidos para o desenvolvimento de APIs Backend, o que implica em muitos materiais didáticos e gratuitos para estudo na Internet.
|
|
|
|
|
|
## Organização do repositório
|
|
|
|
|
|
O projeto Spring Boot do repositório de Backend do projeto está organizado seguindo um padrão *Controller-Service-Repository*, e esse padrão está refletido na organzação de pacotes do projeto. Optou-se por esse padrão pois, ainda que este padrão possa trazer problemas como acoplamento de regras de negócio e tecnologias de ORM (sendo estes problemas que poderiam ser resolvidos com um padrão de arquitetura limpa), ele segmenta o código em camadas visando uma separação de preocupações/responsabilidades (*Separation of concerns*). Além disso, é um padrão fácil de entender para desenvolvedores que não possuem muita experiência com Spring Boot ou com o desenvolvimento de APIs em geral.
|
|
|
|
|
|
Diante disso, os pacotes do projeto estão divididos da forma abaixo:
|
|
|
|
|
|
* :file_folder: `config`: Configurações personalizadas da aplicação (ex.: configuração da conexão com o banco de dados, declaração de Beans).
|
|
|
* :file_folder: `controller`: Expõe pontos de entrada para comunicação com o mundo exterior. Neste projeto, gerencia a API REST da aplicação, incluindo responsabilidades como autenticação e autorização, e delega o processamento de lógica de negócio para a camada de _services\*.
|
|
|
* :file_folder: `dto`: Classes utilizadas para transferir dados entre camadas de uma aplicação (não são entidades, são apenas classes que modelam essas informações a serem trafegadas na aplicação).
|
|
|
* :file_folder: `request`: DTOs para dados de entrada das requisições.
|
|
|
* :file_folder: `response`: DTOs para dados de resposta das requisições.
|
|
|
* :file_folder: `exception`: Exceções personalizadas da aplicação.
|
|
|
* :file_folder: `model`: Entidades do negócio.
|
|
|
* :file_folder: `repository`: Implementa a lógica de acesso ao banco de dados para buscar e persistir dados.
|
|
|
* :file_folder: `service`: Classes que implementam as interfaces em _service\*.
|
|
|
* :file_folder: `interfaces`: Implementação da lógica de negócio (interfaces). Se necessário buscar ou salvar dados, delega isso para a camada de _repository\*
|
|
|
* :file_folder: `util`: Classes e métodos utilitários (ex.: formatação de datas) |
|
|
\ No newline at end of file |