UC_03 - antoniodanielbf-isep/LAPR5-2021 GitHub Wiki

|| INICIO || VOLTAR ||

UC_03 -> Editar relacionamento com tags e força de ligação

=======================================

MENU

|| REQUISITOS || ANÁLISE || DESIGN || OBSERVAÇÕES ||

=======================================

1. Requisitos

Esclarecimento de dúvidas clientes

Saturday, 9 de October de 2021 às 15:17

Boa tarde, estimado cliente, Poder-me-ia esclarecer melhor o que entende por força de ligação entre dois utilizadores e a força de relação entre dois utilizadores? Cumprimentos, João Pereira

Cada utilizador possui ligações com outros utilizadores, podendo catalogar essas ligações de acordo
com etiquetas (tags) e “força de ligação”. Além da força de ligação atribuída pelo utilizador, por
exemplo 5, também é possível calcular a força de uma relação entre dois utilizadores pelo número de
likes menos o número de dislikes de um utilizador nos posts e comentários do outro.
A força de ligação é um valor númerico introduzido pelo utilizador aquando da criação da ligação com outro utilizador.  
A força de relação é calculada pelo sistema

Sunday, 17 de October de 2021 às 09:34

Bom dia, Relativamente às tags que caracterizam a ligação, elas são comuns aos dois users, isto é: Se o user A identificar a tag X na ligação com o user B, o user B saberá que aquela ligação foi identificada com a tag X? Ou cada user tem apenas acesso às suas Tags? O mesmo acontece com a força de relação, existe o resultado da força do user A com o B e do B com o A, ou é a mesma força? Com os melhores cumprimentos, Grupo 80

as tags, bem como a força de ligação é sempre unidirecional e por isso numa associação A-> B as tags e a força de serão definidas por A e na sua perspectiva. por exemplo
A-> B, indicou força de ligação 10 e tags "isep" e ".net"
B -> A, indicou força de ligação 20 e tags "erasmus", "lapr5" e "poker"
no momento de aceitar/recusar um pedido de ligação, o utilizador "B" poderá ver as tags que "A" indicou

Wednesday, 20 de October de 2021 às 19:26

No enunciado indica que "Além da força de ligação atribuída pelo utilizador, por exemplo 5, também é possível calcular a força de uma relação entre dois utilizadores pelo número de likes menos o número de dislikes de um utilizador nos posts e comentários do outro. Nesse sentido a força de ligação é unidirecional." Isto significa a existência de dois tipos distintos de forças possíveis perante uma conexão realizada? Ou significa que na ausência da atribuída, é realizado um calculo tendo por base os likes e os dislikes dos utilizadores da conexão?

são dois tipos diferentes de forças

Friday, 22 de October de 2021 às 18:30

Então a força de "amizade" entre dois utilizadores é quantificada pela força de ligação (atribuído pelos utilizadores) e pela força da relação que é calculada pelo sistema? Relativamente à forma do cálculo da força da relação é dito que é igual ao "número de likes menos o número de dislikes de um utilizador nos posts e comentários do outro", mas- isso quer dizer que esta é também unidirecional?, ou é número dos likes menos o número de dislikes de ambos os 2 utilizadores um ao outro? Exemplo: Utilizador A deu 10 likes e 2 dislikes ao Utilizador B e o Utilizador B deu 5 likes e 1 dislike ao A. A força de ligação seria de (10+5-2-1) ou seria de (10-2) de User A -> User B e (5-1) de User B -> User A ?

força de "amizade" não é um termo utilizado neste sistema uma vez que a ligação entre dois utilizadores pode ser meramente profissional e não de "amizade"
o "força de ligação" como "força de relação" são unidirecionais. como já foi dito anteriormente a força de ligação é um valor introduzido pelo utilizador. por exemplo, A atribui 10 à sua ligação com B enquanto B atribui 7 à sua ligação com A.
a força de relação é dada pela formula L(i,j) - D(i,j), em que
L(i,j) = nr likes do utilizador i ao utilizador j
Di,j) = nr de dislikes do utilizador i ao utilizador j

Friday, 22 de October de 2021 às 11:23

Boa tarde, prezado, cliente, Gostaríamos de saber entre que valores espera que as forças de ligação se encontrem. Cumprimentos, Grupo 61

entre 1 e 100

Monday, 25 de October de 2021 às 23:45

Boa noite, estimado, cliente, Gostaria de saber se o objetivo desta funcionalidade é simplesmente editar as tags e a força de ligação de um dado relacionamento, perguntando cada uma destas ao utilizador, ou se pretende algo mais. Cumprimentos, Grupo 61

o utlizador deve escolher uma ligação, ex., usando o modolo de visualização ou uma listagem, e editar a força de ligação e as tags

->MENU


2. Análise

Para editar uma relação com tags e força de ligação, o utilizador deve indicar, após lhe ser mostrada a rede social, a relação que pretende editar e as novas tags e força de ligação. A força de ligação é numérica, de 1 a 100 e as tags são palavras curtas alfanuméricas, identificadoras de uma relação.

Alterações ao MD

Até ao momento não são necessárias alterações no MD.

Testes a Implementar

Testes de validação de tag e força de ligação.

Regras de Negócio

  • tags - unidirecionais , obrigatorio

  • força de ligação - unidirecional, numérico, varia entre 1 e 100, obrigatorio

->MENU


3. Design

NÍVEL 1

SSD

NÍVEL 2

SSDN2

3.1. Realização da Funcionalidade

NÍVEL 3

SD

3.2. Padrões Aplicados

User Interface

O padrão de User Interface é usado para fornecer uma interface simples de usar para o utilizador e servir de intermediário entre o utilizador e as partes funcionais so sistema. Neste caso é utilizada a classe EditarRelacaoUI

Controller

O padrão Controller foi usado para ter um controlador (neste caso de uso EditarRelacaoController) que pode atuar como um organizador da lógica do caso de uso.

Information Expert

Esse padrão atribui responsabilidades às classes para o domínio de negócios que ele representa, como é o caso do Relacao, ForcaDeLigacao e Tag.

Creator

Normalmente as regras 1 e 2, neste caso de uso, o creator foi usado por Relacao para instanciar uma ForcaDeLigacao e uma Tag.

High Cohesion, Low Coupling

Padrão usado para diminuir o acoplamento entre classes e, ao mesmo tempo, apenas atribuir lhes associações que sejam realmente coesas com o seu propósito. Em todo esse caso de uso, tentamos restringir as responsabilidades próprias de cada classe e, assim, minimizar as associações apenas ao necessário. Como pode ser visto neste caso de uso:

RedeSocialDTO salva os dados inseridos num objeto intermediário para posteriormente mostrar o utilizador a sua perspetiva de Rede Social;

Relacao é usado para instanciar uma Relacao;

RedeSocialRepository é usado para armazenar a Rede Social.

EditarRelacaoController trata de toda a lógica de atualização de um evento delegando etapas intermediárias às outras classes.

DTO

O padrão DTO fornece um objeto intermediário para transferência de dados, reduzindo o acoplamento entre o domínio e as camadas do aplicativo, permitindo o carregamento rápido do aplicativo e garantindo mais segurança. Nesse caso de uso, temos a sua implementação na classe RedeSocialDTO.

Repository

O Repositório ajuda a persistir, armazenar e acessar dados. É usado na camada de Persistência para garantir a instanciação de RedeSocialRepository, onde é armazenado. Abstrai os detalhes dos métodos que modificam o estado deste objeto.

3.3. Testes

Nesta secção deve sistematizar como os testes foram concebidos para permitir uma correta aferição da satisfação dos requisitos.

Teste 1: Introduzir valor da força de ligação alfanumérico

[Test]
    public void introduzirValorLigacaoAlfanumerico()
    {
        Exception exception = null;
        try
        {
            ForcaLigacao forcaLigacao = new ForcaLigacao(14);
        }
        catch (Exception ex)
        {
            exception = ex;
        }

        Assert.IsNull(exception);
    }

Teste 2: Introduzir um valor de força de ligação menor do que 1

    [Test]
    public void introduzirValorLigacaoMenorQueUm()
    {
        Exception exception = null;
        try
        {
            ForcaLigacao forcaLigacao = new ForcaLigacao(-1);
        }
        catch (Exception ex)
        {
            exception = ex;
        }

       Assert.IsNull(exception);
    }

Teste 3: Introduzir um valor de força de ligação maior do que 100

     [Test]
    public void introduzirValorLigacaoMaiorQueCem()
    {
        Exception exception = null;
        try
        {
            ForcaLigacao forcaLigacao = new ForcaLigacao(300);
        }
        catch (Exception ex)
        {
            exception = ex;
        }

       Assert.IsNull(exception);
    }

Teste 5: Testar a recusa de um valor nulo ou vazio na tag

    [Test]
    public void testarRecusaDeNomeNuloOuVazioNaTag()
    {
        Exception exception = null;
        try
        {
            Tags nome = new Tags(" ");
        }
        catch (Exception ex)
        {
            exception = ex;
        }

        Assert.IsNotNull(exception);
    }

->MENU


4. Implementação

Nesta secção a equipa deve providenciar, se necessário, algumas evidências de que a implementação está em conformidade com o design efetuado. Para além disso, deve mencionar/descrever a existência de outros ficheiros (e.g. de configuração) relevantes e destacar commits relevantes;

Recomenda-se que organize este conteúdo por subsecções.

5. Integração/Demonstração

Nesta secção a equipa deve descrever os esforços realizados no sentido de integrar a funcionalidade desenvolvida com as restantes funcionalidades do sistema.

6. Observações

Nesta secção sugere-se que a equipa apresente uma perspetiva critica sobre o trabalho desenvolvido apontando, por exemplo, outras alternativas e ou trabalhos futuros relacionados.

->MENU


⚠️ **GitHub.com Fallback** ⚠️