Views - antoniodanielbf-isep/LAPR5-2021 GitHub Wiki
Contents
- Views
- Introduction
- Nível 1
- Nível 2
- Vista Lógica
- Vista de Processos
- SSD UC3 (Porquê este UC?)
- SSD UC4 (Porquê este UC?)
- SSD UC5 (Porquê este UC?)
- SSD UC6 (Porquê este UC?)
- SSD UC7 (Porquê este UC?)
- SSD UC8 (Porquê este UC?)
- SSD UC9 (Porquê este UC?)
- SSD UC10 (Porquê este UC?)
- SSD UC11 (Porquê este UC?)
- SSD UC12 (Porquê este UC?)
- SSD UC13 (Porquê este UC?)
- SSD UC14 (Porquê este UC?)
- SSD UC16 (Porquê este UC?)
- SSD UC20 (Porquê este UC?)
- SSD UC21 (Porquê este UC?)
- SSD UC22a (Porquê este UC?)
- SSD UC22b (Porquê este UC?)
- SSD UC24 (Porquê este UC?)
- SSD UC25 (Porquê este UC?)
- SSD UC26 (Porquê este UC?)
- SSD UC27 (Porquê este UC?)
- SSD UC28 (Porquê este UC?)
- SSD UC33 (Porquê este UC?)
- SSD UC35 (Porquê este UC?)
- (outros SSD arquiteturalmente relevantes)
- Vista de Implementação
- Vista Física
- Nível 3 (SITE)
- Nível 3 (TODOS OS MÓDULOS DO SISTEMA)
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
Vista de Processos
DIAGRAMA DE CENÁRIOS
SSD UC3
SSD UC4
SSD UC5
SSD UC6
SSD UC7
SSD UC8
SSD UC9
SSD UC10
SSD UC11
SSD UC12
SSD UC13
SSD UC14
SSD UC16
SSD UC20
SSD UC24
SSD UC25
SSD UC26
SSD UC27
SSD UC28
SSD UC33
SSD UC35
(outros SSD arquiteturalmente relevantes)
[...]
Nível 2
Vista Lógica
Vista de Processos
SSDN2 UC3
SSDN2 UC4
SSDN2 UC5
SSDN2 UC6
SSDN2 UC7
SSDN2 UC8
SSDN2 UC9
SSDN2 UC10
SSDN2 UC11
SSDN2 UC12
SSDN2 UC13
SSDN2 UC14
SSDN2 UC16
SSDN2 UC17
SSDN2 UC18
SSDN2 UC19
SSDN2 UC20
SSDN2 UC21
SSDN2 UC22a
SSDN2 UC22b
SSDN2 UC24
SSDN2 UC25
SSDN2 UC26
SSDN2 UC27
SSDN2 UC28
SSDN2 UC33
SSDN2 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
Vista Física
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:
Alternativa baseada numa arquitetura por camadas concêntricas (Onion):
Vista Lógica Nível 3 - SPA
Vista Lógica Nível 3 - MDR
Vista Lógica Nível 3 - MDP
Vista Lógica Nível 3 - IA
A alternativa Onion será a adotada.
Vista de Processos
SD CRIARX
SD LISTARX
SD EDITARX
SD UC3
SD UC4
SD UC5
SD UC6
SD UC7
SD UC8
SD UC9
SD UC10
SD UC11
SD UC12
SD UC13
SD UC14
SD UC16
SD UC17
SD UC18
SD UC19
SD UC20
SD UC21
SD UC22a
SD UC22b
SD UC24
SD UC25
SD UC26
SD UC27
SD UC28
SD UC33
SD UC35
(outros SSD arquiteturalmente relevantes)
[...]
Nível 3 (TODOS OS MÓDULOS DO SISTEMA)
Vista de Implementação
WALKING_SKELETON
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 |