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
This is an old version of this page. You can view the most recent version or browse the 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 os 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 sub-componentes, é instanciado em um contêiner Docker conforme será explicado no item 7.4.
DEPLOYMENT_DIAGRAM
  • O dispostivo 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 sub-componentes da aplicação REST

  • Cada rota disponibilizada para uso compõe um sub-componente 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 browse 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 Arquitetura Não Funcional

TODO

7.6 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 reúso.

7.7 Segurança

A segurança do projeto foi implementada utilizando a dependência Spring Security e a autenticação utilizando <a href="https://jwt.io/>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