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
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • EasyWork
  • Wiki
  • Wiki
  • 7. arquitetura

Last edited by Gabriel Fanto Stundner Mar 02, 2020
Page history

7. arquitetura

7.1 Introdução

  • O objetivo deste documento é fornecer uma visão geral do planejamento da arquitetura e do projeto detalhado no desenvolvimento do projeto Easywork, realizado durante o semestre 2019/01 na Agência Experimental de Engenharia de Software (AGES) do curso de Engenharia de Software (ES-360) da Pontifícia Universidade Católica do Rio Grande do Sul (PUCRS). Este documento abrange o propósito, escopo, definição, acrônimos, abreviações, referências e a visão geral da Arquitetura de Software e do Projeto Detalhado utilizados.

7.2 Diagrama de Deployment

  • O projeto foi dividido em camadas que executam em dispositivos diferentes, e podem ser visualizadas na figura a seguir, juntamente das principais tecnologias envolvidas. Cada componente, incluindo possíveis subcomponentes, é instanciado em um contêiner Docker conforme será explicado no item 7.4.
DEPLOYMENT_DIAGRAM
  • O dispositivo Client faz parte da camada de Front-End. Este dispositivo possui um componente React.js Application que é uma abstração de uma aplicação desenvolvida na linguagem Javascript utilizando a biblioteca React.js para comunicação com o usuário.
  • O dispositivo Server faz parte da camada de Back-end. Este dispositivo possui um componente REST API (Representational State Transfer - Application Programming Interface) que é uma abstração de uma aplicação desenvolvida na linguagem Java utilizando o framework Spring para implementar o conceito de microsserviços. Serve para validar regras de negócio e comunicar a camada do usuário com o servidor de banco de dados através de protocolo HTTP.
  • O dispositivo Persistence faz parte da camada de persistência de dados. Este dispositivo possui um componente Relational Database que é uma abstração de um banco de dados relacional PostegreSQL, que é responsável por armazenar e gerenciar todos os dados do sistema.

7.3 Visão de subcomponentes da aplicação REST

  • Cada rota disponibilizada para uso compõe um subcomponente do componente REST API descrito acima. Estas rotas e sua breve explicação podem ser encontradas na wiki 9. rotas api.
  • Outro modo de visualização e entendimento de comportamento das rotas é através da ferramenta Postman, cujas coleções de rotas por microsserviço podem ser obtidas no repositório 9. rotas api.

7.4 Conteinerização e Diagrama de Microsserviços

  • Para a implantação do sistema (deploy) utiliza-se Docker, uma tecnologia de software que permite que a utilização contêineres (virtualizações em nível de sistema operacional) que empacotam uma aplicação e suas dependências em um recipiente virtual.
  • Mais precisamente, utiliza-se Docker Compose, uma ferramenta que define e implementa um ambiente contendo múltiplos contêiners Docker.
  • Abaixo encontra-se o diagrama de microsserviços onde:
    • a caixa em branco representa o usuário do sistema, tipicamente um browser web.
    • as caixas em azul representam as aplicações dockerizadas e implementadas no projeto.
    • as caixas em cinza representam as aplicações não implementadas no projeto, podendo fazer parte de um futuro MVP.
MICROSERVICES_DIAGRAM

7.5 Análise dos princípios SOLID

Single Responsibility Principle:

  • O projeto possui três microsserviços separados em características macro: autenticação, pesquisas e respostas.
  • Cada microsserviço possui pacotes específicos para segurança, modelo de dados, comunicação com o banco de dados, modelo de saída, controladores e serviços.
  • Os controladores estão definidos conforme as rotas disponibilizadas, implementam um método para cada rota específica e delegam o processamento para os métodos de serviço.

Open Closed Principle, Liskov Substitution Principle, Interface Segregation Principle, Dependency Inversion Principle:

  • O projeto possui uma lógica concisa, direta e enxuta, logo suas classes não precisam de adptações, porém podem ser estendidas quando necessário.
  • Novas rotas e serviços podem ser facilmente criados com base nos já disponibilizados, sendo necessário apenas definição dos endpoints e da regra de negócio.
  • O projeto se vale de diversas abstrações, interfaces e anotações providas pelo framework Spring e outros terceiros, assim trata-se de uma implementação que segue boas práticas consolidadas no mercado, que possui fácil manutenção e extensão, e que pratica grande reuso.

7.6 Segurança

A segurança do projeto foi implementada utilizando a dependência Spring Security e a autenticação utilizando jsonwebtoken. Funcionalmente a segurança é implementada da seguinte forma:

  • A rota de cadastro da api de autenticação permite registrar usuários com no mínimo cinco informações nome completo, usuário, e-mail, senha e papel (name, username, email, password e role).
  • Os possíveis papéis (roles) de usuários no sistema são:
    • ROLE_ADMIN - administrador, só pode ser cadastrado localmente no servidor da aplicação.
    • ROLE_RESEARCHER - pesquisador, cadastro via tela de cadastro em qualquer browser web.
    • ROLE_RESPONDENT - respondente, cadastro via tela de cadastro em qualquer browser web.
  • A rota de login da api de autenticação permite que um usuário faça login no sistema utilizando usuário ou e-mail e senha. Ao validar as credenciais do usário a api retornar um token jwt que é salva pelo cliente front-end para acessar rotas protegidas do sistema.
  • Os clientes devem mandar o token jwt no header de cada requisição que acessar rotas protegidas.
  • O Spring Security será o responsável por restringir o acesso às rotas conforme abaixo:
    • rotas de cadastro, login e, se necessário, recursos estáticos como imagens e scripts são acessíveis a todos que acessarem a página web do sistema, mesmo que não estejam autenticados.
    • rotas de consulta a pesquisas cadastradas necessitam apenas que o usuário esteja logado.
    • rotas para criar e editar pesquisas necessitam que o usuário esteja logado como administrador ou pesquisador, sendo que é possível editar apenas pesquisas cadastradas pelo próprio usuário logado.
    • rotas para iniciar e finalizar uma resposta podem ser acessadas apenas por usuário respondentes.
    • rotas que deletam fisicamente registros de usuários, pesquisas e respostas são acessadas apenas por usuários administradores.

Clone repository
  • 1. home
  • 2. cronograma
  • 3. time
  • 4. pivotal labs
  • 5. requisitos
  • 6. mockups de tela
  • 7. arquitetura
  • 8. modelagem de dados
  • 9. rotas api
  • :10. tutorial de instalacao do projeto
  • :11. tecnologias
  • Home