Views - antoniodanielbf-isep/LAPR5-2021 GitHub Wiki

INICIO

Contents

Views

Introduction

Será adotada a combinação de dois modelos de representação arquitetural: C4 e 4+1.

O Modelo de Vistas 4+1 Krutchen-1995(References.md#Kruchten-1995) propõe a descrição do sistema através de vistas complementares permitindo assim analisar separadamente os requisitos dos vários stakeholders do software, tais como utilizadores, administradores de sistemas, project managers, arquitetos e programadores. As vistas são deste modo definidas da seguinte forma:

  • Vista lógica: relativa aos aspetos do software visando responder aos desafios do negócio;
  • Vista de processos: relativa ao fluxo de processos ou interações no sistema;
  • Vista de desenvolvimento: relativa à organização do software no seu ambiente de desenvolvimento;
  • Vista física: relativa ao mapeamento dos vários componentes do software em hardware, i.e. onde é executado o software;
  • Vista de cenários: relativa à associação de processos de negócio com atores capazes de os espoletar.

O Modelo C4 Brown-2020(References.md#Brown-2020)C4-2020(References.md#C4-2020) defende a descrição do software através de quatro níveis de abstração: sistema, contentor, componente e código. Cada nível adota uma granularidade mais fina que o nível que o antecede, dando assim acesso a mais detalhe de uma parte mais pequena do sistema. Estes níveis podem ser equiparáveis a mapas, e.g. a vista de sistema corresponde ao globo, a vista de contentor corresponde ao mapa de cada continente, a vista de componentes ao mapa de cada país e a vista de código ao mapa de estradas e bairros de cada cidade. Diferentes níveis permitem contar histórias diferentes a audiências distintas.

Os níveis encontram-se definidos da seguinte forma:

  • Nível 1: Descrição (enquadramento) do sistema como um todo;
  • Nível 2: Descrição de contentores do sistema;
  • Nível 3: Descrição de componentes dos contentores;
  • Nível 4: Descrição do código ou partes mais pequenas dos componentes (e como tal, não será abordado neste DAS/SAD).

Pode-se dizer que estes dois modelos se expandem ao longo de eixos distintos, sendo que o Modelo C4 apresenta o sistema com diferentes níveis de detalhe e o Modelo de Vista 4+1 apresenta o sistema de diferentes perspetivas. Ao combinar os dois modelos torna-se possível representar o sistema de diversas perspetivas, cada uma com vários níveis de detalhe.

Para modelar/representar visualmente, tanto o que foi implementado como as ideias e alternativas consideradas, recorre-se à Unified Modeling Language (UML) UML-2020(References.md#UML-2020) UMLDiagrams-2020(References.md#UMLDiagrams-2020).

Nível 1

Vista Lógica

N1-VL

Vista de Processos

DIAGRAMA DE CENÁRIOS

DC

SSD UC3

N1-VP-UC3

SSD UC4

N1-VP-UC4

SSD UC5

N1-VP-UC5

SSD UC6

N1-VP-UC6

SSD UC7

N1-VP-UC7

SSD UC8

N1-VP-UC8

SSD UC9

N1-VP-UC9

SSD UC10

N1-VP-UC10

SSD UC11

N1-VP-UC11

SSD UC12

N1-VP-UC12

SSD UC13

N1-VP-UC13

SSD UC14

N1-VP-UC14

SSD UC16

N1-VP-UC16

SSD UC20

N1-VP-UC20

SSD UC24

N1-VP-UC24

SSD UC25

N1-VP-UC25

SSD UC26

N1-VP-UC26

SSD UC27

N1-VP-UC27

SSD UC28

N1-VP-UC28

SSD UC33

N1-VP-UC33

SSD UC35

N1-VP-UC35

(outros SSD arquiteturalmente relevantes)

[...]

Nível 2

Vista Lógica

N2-VL

Vista de Processos

SSDN2 UC3

N2-VP-UC3

SSDN2 UC4

N2-VP-UC4

SSDN2 UC5

N2-VP-UC5

SSDN2 UC6

N2-VP-UC6

SSDN2 UC7

N2-VP-UC7

SSDN2 UC8

N2-VP-UC8

SSDN2 UC9

N2-VP-UC9

SSDN2 UC10

N2-VP-UC10

SSDN2 UC11

N2-VP-UC11

SSDN2 UC12

N2-VP-UC12

SSDN2 UC13

N2-VP-UC13

SSDN2 UC14

N2-VP-UC14

SSDN2 UC16

N2-VP-UC16

SSDN2 UC17

N2-VP-UC17

SSDN2 UC18

N2-VP-UC18

SSDN2 UC19

N2-VP-UC19

SSDN2 UC20

N2-VP-UC20

SSDN2 UC21

N2-VP-UC21

SSDN2 UC22a

N2-VP-UC22a

SSDN2 UC22b

N2-VP-UC22b

SSDN2 UC24

N2-VP-UC24

SSDN2 UC25

N2-VP-UC25

SSDN2 UC26

N2-VP-UC26

SSDN2 UC27

N2-VP-UC27

SSDN2 UC28

N2-VP-UC28

SSDN2 UC33

N2-VP-UC33

SSDN2 UC35

N2-VP-UC35

SSDN2 UC3 (Porquê este UC?)

A relevância desta funcionalidade advém do facto de o utilizador/jogador da rede social poder querer editar
a sua relação com outro utilizador/jogador, pois as relações estão sempre sujeitas a evoluções positivas
ou negativas.

SSDN2 UC4 (Porquê este UC?)

A relevância desta funcionalidade advém do facto de o utilizador/jogador da rede social poder querer consultar 
a sua força de relação com outro utilizador/jogador, pois as relações estão sempre sujeitas a evoluções positivas
ou negativas.

SSDN2 UC5 (Porquê este UC?)

O utilizador pode a qualquer momento querer editar o seu perfil, como por exemplo a sua imagem de avatar.
Pode ainda querer associar outro perfil de Facebook e de Linkedin , mudar o seu email. 
Em suma, qualquer perfil de qualquer utilizador está sempre sujeito a alterações, pelo que se deve
desenvolver esta funcionalidade que permita tais mudanças.

SSDN2 UC6 (Porquê este UC?)

O estado de humor de qualquer utilizador nem sempre é constante, é sempre influenciado pelos eventos
e pelo meio que o rodeia. Como tal, é necessário implementar uma funcionalidade que permita ao utilizador
clarividenciar o seu estado de humor, para que possa até ser visto por outros utilizadores da rede social.

SSDN2 UC7 (Porquê este UC?)

A base da plataforma é a visualização e manipulação de grafos representativos de redes sociais.
Devido a esse facto, o utilizador deve ter a possibilidade de navegar pela sua rede a partir da sua
perspetiva para a gerir como bem entender.

SSDN2 UC8 (Porquê este UC?)

Qualquer rede social necessita de utilizadores para que estes possam interagir entre si.
Portanto, a funcionalidade de registar utilizadores no sistema é fundamental para que a plataforma possa
funcionar.

SSDN2 UC9 (Porquê este UC?)

Como existe a componente de jogo para além da componente de rede social, o jogador não sabe que pessoas
pode adicionar à sua rede nem a quem pode pedir introdução. Em consequência, para poupar trabalhos 
enormes de pesquisa, o sistema deve sugerir a este que utilizadores pode ter como objetivo.

SSDN2 UC10 (Porquê este UC?)

De acordo com a componente quer de jogo quer de rede social, deve ser permitido ao utilizador poder pesquisar
utilizadores que conheça na rede e, desta forma, pedir ligação a esse utilizador, para que possa expandir 
a sua rede social e interagir com novos utilizadores.

SSDN2 UC11 (Porquê este UC?)

Antes de se poder ligar a outro utilizador, o utilizador necessita de pedir introdução ao utilizador objetivo.
Isto porque é necessário, do ponto de vista diplomático, o utilizador ser primeiro introduzido, antes de 
se ligar simplesmente.

SSDN2 UC12 (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de controlar
os pedidos de introdução que recebe, e decidir se quer ou não ser apresentado a outros utilizadores da rede social.

SSDN2 UC13 (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de efetuar posts e mostrá-los pela rede
social aos seus amigos.

SSDN2 UC14 (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de comentar posts e mostrá-los pela rede
social aos seus amigos.

SSDN2 UC16 (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de consultar a sua fortaleza de rede.

SSDN2 UC17 (Porquê este UC?)

Com esta funcionalidade, o utilizador/jogador terá a possibilidade de ver qual é o caminho mais
forte até um determinado utilizador objetivo, podendo maximizar o número de pontos e ter uma rede das mais forte 
(fornece uma vantagem competitiva).

SSDN2 UC18 (Porquê este UC?)

Com esta funcionalidade, o utilizador/jogador terá a possibilidade de ver qual é o caminho mais
curto até um determinado utilizador objetivo, poupando o seu tempo no processo de planeamento para chegar a este.

SSDN2 UC19 (Porquê este UC?)

Com esta funcionalidade, o utilizador/jogador terá a possibilidade de ver qual é o caminho mais
seguro até um determinado utilizador objetivo, garantido uma certa conexão com os demais utilizadores da sua rede,
e também auxilia em ter uma das redes mais seguras da aplicação.

SSDN2 UC20 (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de consultar o tamanho da rede de um
utilizador até ao 3ºnível.

SSDN2 UC21 (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de consultar o grafo de amigos comuns
com outro utilizador.

SSDN2 UC22a (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de consultar a leaderboard das dimensões
de rede dos 10 melhores utilizadores.

SSDN2 UC22b (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de consultar a leaderboard das fortalezas
de rede dos 10 melhores utilizadores.

SSDN2 UC24 (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de consultar a tag cloud das tags de 
todos os utilizadores.

SSDN2 UC25 (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de consultar a tag cloud das tags de
todas as relações.

SSDN2 UC26 (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de consultar sugestões de amigos.

SSDN2 UC27 (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de consultar a tag cloud das tags do
próprio utilizador.

SSDN2 UC28 (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de consultar a tag cloud das tags das
relações do próprio utilizador.

SSDN2 UC33 (Porquê este UC?)

Esta funcionalidade é importante, pois é uma forma que o utilizador possui de controlar
as de introduções que recebe, e decidir que quer ou não ter aquele utilizador com alguma relação na sua rede social.

SSDN2 UC35 (Porquê este UC?)

Com esta funcionalidade o utilizador pode mais tarde consultar pedidos de ligação aos quais ainda não tinha
respondido, permitindo-o focar-se noutros assuntos.

(outros SSD arquiteturalmente relevantes)

[...]

Vista de Implementação

N2-VL

Vista Física

N2-VL

Uma proposta muito simplificada.

De facto, deve-se ter em consideração os requisitos não funcionais "Physical Contraints".

Nível 3 (SITE)

Vista Lógica

Alternativa baseada numa arquitetura por camadas sobrepostas: N3-VL-MDR-alt1

Alternativa baseada numa arquitetura por camadas concêntricas (Onion):

Vista Lógica Nível 3 - SPA

N3-VL-SPA

Vista Lógica Nível 3 - MDR

N3-VL-MDR

Vista Lógica Nível 3 - MDP

N3-VL-MDP

Vista Lógica Nível 3 - IA

N3-VL-IA

A alternativa Onion será a adotada.

Vista de Processos

SD CRIARX

N3-VP-CRIARX

SD LISTARX

N3-VP-LISTARX

SD EDITARX

N3-VP-CRIARX

SD UC3

N3-VP-UC3

SD UC4

N3-VP-UC4

SD UC5

N3-VP-UC5

SD UC6

N3-VP-UC6

SD UC7

N3-VP-UC7

SD UC8

N3-VP-UC8

SD UC9

N3-VP-UC9

SD UC10

N3-VP-UC10

SD UC11

N3-VP-UC11

SD UC12

N3-VP-UC12

SD UC13

N3-VP-UC13

SD UC14

N3-VP-UC14

SD UC16

N3-VP-UC16

SD UC17

N3-VP-UC17

SD UC18

N3-VP-UC18

SD UC19

N3-VP-UC19

SD UC20

N3-VP-UC20

SD UC21

N3-VP-UC21

SD UC22a

N3-VP-UC22a

SD UC22b

N3-VP-UC22b

SD UC24

N3-VP-UC24

SD UC25

N3-VP-UC25

SD UC26

N3-VP-UC26

SD UC27

N3-VP-UC27

SD UC28

N3-VP-UC28

SD UC33

N3-VP-UC33

SD UC35

N3-VP-UC35

(outros SSD arquiteturalmente relevantes)

[...]

Nível 3 (TODOS OS MÓDULOS DO SISTEMA)

Vista de Implementação

N3-VI-TMS

WALKING_SKELETON

WALKING_SKELETON

COMMUNICATIONS

COMMUNICATIONS

REQUESTS

PEDIDOS QUE RECEBE MDR QUEM FAZ
AUTENTICACAO
'/api/Autenticacao' SPA
INTRODUCAO
'/api/Introducao/{email}' SPA
'/api/Introducao/{introId}/creating' SPA
'/api/Introducao/{email}/create' SPA
'/api/Introducao/{email}/{introId}/Accept' SPA
'/api/Introducao/{IntroducaoId}/Decline' SPA
LEADERBOARD
'/api/Leaderboard/{email}/strength' SPA
'/api/Leaderboard/{email}/dimension' SPA
'/api/Leaderboard/{email}/points' SPA
PEDIDO_INTRODUCAO
'/api/PedidoIntroducao/{email}/origin' SPA
'/api/PedidoIntroducao/obterIntermediario/{origem}/{destino}' SPA
'/api/PedidoIntroducao/{email}/intermediate' SPA
'/api/PedidoIntroducao/{pedIId}/creating' SPA
'/api/PedidoIntroducao/{email}/makeRequest' SPA
'/api/PedidoIntroducao/{email}/acceptRequest' SPA
'/api/PedidoIntroducao/{email}/{pedidoId}/Decline' SPA
PEDIDO_LIGACAO
'/api/PedidoLigacao/{email}/origin' SPA
'/api/PedidoLigacao/{email}/destiny' SPA
'/api/PedidoLigacao/{email}/getConnectionRequest' SPA
'/api/PedidoLigacao/{emailDestinatario}/{pedidoLigacaoId}/Aceitar' SPA
'/api/PedidoLigacao/{email}/{pedidoLigacaoId}/Decline' SPA
'/api/PedidoLigacao/{email}/origin' SPA
REDE_SOCIAL
'/api/RedeSocial/{email}/{nivel}' SPA
'/api/RedeSocial/{email}/{nivel}/dto' SPA
'/api/RedeSocial/{email}/tamanhoRede' SPA
RELACAO
'/api/Relacao' SPA/IA
'/api/Relacao/{email}' SPA
'/api/Relacao/{introducaoId}/getById' SPA
'/api/Relacao/{email}/getTagsAllUsers' SPA
'/api/Relacao/{email}/getTagsUser' SPA
'/api/Relacao/{introducaoId}/creating' SPA
'/api/Relacao/{email}/{introducaoId}/AcceptFromIntroducao' SPA
'/api/Relacao/{email}/{relacaoId}/changeAllInfo' SPA
UTILIZADOR
'/api/Utilizador'(get) SPA/IA
'/api/Utilizador'(post) SPA
'/api/Utilizador/{email}' SPA
'/api/Utilizador/{email}/allTagsAllUsers' SPA
'/api/Utilizador/{email}/allTagsUser' SPA
'/api/Utilizador/{email}/search' SPA
'/api/Utilizador/{email}/creating' MDR
'/api/Utilizador/{email}/sugestoesAmizade' SPA
'/api/Utilizador/{email}/changeHumor' SPA
'/api/Utilizador/{email}/changeAllInfo' SPA
'/api/Utilizador/{email}/eraseUser' SPA
PEDIDOS QUE RECEBE IA QUEM FAZ
CAMINHOS
'/api/Caminhos/caminhoMaisCurto/{origem}/{destino}' SPA
'/api/Caminhos/caminhoMaisCurto/{origem}/{destino}' SPA
'/api/Caminhos/caminhoMaisSeguro/{origem}/{destino}/{valorMinimo}' SPA
REDE_SOCIAL
'/api/RedeSocial/XTagsEmComum/{numeroTags}' SPA
'/api/RedeSocial/TamanhoRedeUtilizador/{utilizador}/{nivelMaximo}' SPA
'/api/RedeSocial/NumeroLigacoesSegundoNivel/{utilizador}' SPA
'/api/RedeSocial/TamanhoRedeTerceiroNivel/{utilizador}' SPA
'/api/RedeSocial/AmigosEmComum/{utilizador1}/{utilizador2}' SPA
'/api/RedeSocial/FortalezaRede/{utilizador1}' SPA
PEDIDOS QUE RECEBE MDP QUEM FAZ
UTILIZADOR
'/api/utilizadores' SPA
'/api/utilizadores/erase' MDR/SPA
'/api/utilizadores/getFeed' SPA
'/api/utilizadores/getStrength' SPA
'/api/utilizadores/getLikesDislike' SPA
COMENTARIO
'/api/comentarios' SPA
POST
'/api/posts' SPA