UnBArqDsw2023-1/2023.1_G5_ProjetoRiHappy

Padrões de Projeto - GoF

Closed this issue · 11 comments

Feature

Descrição dos padrões de projeto GOF utilizados no projeto. A entrega mínima consiste na aplicação de um dos padrões GOF, dentre:

Criacional:

Estruturais

Comportamental

Tarefas

  • Alocar os membros da equipe em estudos sobre um ou mais padrões.
  • Separar material de estudo
  • Estudar o assunto
  • Definir quais padrões fazem sentido no escopo do trabalho

Vou estudar os padrões Singleton, Adapter e Observer.

Vou estudar os padrões Bridge e Strategy

Vou estudar os padrões Factory Method e Template Method

estou estudando também o padrão prototype e comand

vou estudar os padrões Decorator e Proxy do Estruturais

vou estudar os padrões Builder e Abstract factory

Estudando o padrão FlyWeigth do Estruturais

Como amo esse assunto eu fiz um resuminho pra estudar e aproveitei pra ligar com os problemas que podemos resolver no projeto.

Singleton

O padrão de projeto singleton visa garantir que uma classe só possa ter uma instância, fornecendo um acesso global à essa instância.

Problema Resolvido

O padrão de projeto singleton resolve os seguintes problemas:

  • Como controlar o acesso à recursos compartilhados entre as classes, como banco de dados e conexão com a API, por exemplo?
  • Como manter um acesso global à mesma instância desse objeto?

Estrutura

  • O construtor deve ser privado, para evitar que outras classes instanciem objetos usando new
  • Deve existir um método estático retornando a instância da classe, se existir. Se não existir, esse próprio método a criará.

image

Exemplos de implementação em Java

Relação com o Projeto

Penso que poderíamos usar Singletons nos seguintes contextos:

  • Comunicação com o Banco de Dados: Uma classe DBConnection responsável por estabelecer a comunicação das Controllers com o Banco de Dados.
  • Comunicação via API do frontend com backend: Uma classe APIService responsável por estabelecer a comunicação entre a camada View e a Controller, via API.
  • Serviço de envio de email: Uma classe EmailController responsável por estabelecer a comunicação com o serviço provedor de email, para notificar avaliações recebidas na plataforma, notificar o sistema de avaliação de notificações e assim por diante.

Adapter

Essa imagem ilustra bem o propósito do Adapter, que é prover uma comunicação entre objetos incompatíveis.

image

Problema Resolvido

Esse padrão pode ser utilizado quando os dados vêm de lugares diferentes, em formatos diferentes, por exemplo.

Estrutura

  • A classe Adapter implementa a interface de uma das classes e têm a outra como atributo.

image

Relação com o Projeto

  • A partir de uma análise das requisições do site da Ri Happy na página de avaliações descobri que eles usam um serviço terceirizado de avaliações, o yourviews. Nesse contexto seria interessante uma classe AvaliacaoAdapter que recebe uma resposta da requisição pra API do serviço e faz o tratamento nos dados para exibição na plataforma.

Exemplos de implementação em Java

Observer

Permite a definição de um mecanismo de "inscrição" para notificar múltiplos objetos sobre um evento que ocorre no objeto observado.

Problema Resolvido

Resolve o problema que ocorre quando as alterações em um objeto exigem alterações em outro, como uma atualização em objetos ou renderização de componentes no frontend, por exemplo. Em javascript/typescript o observer é muito usado, com o subscribe.

Estrutura

Esse padrão é composto por um publisher, quem emite o evento, e os subscribers, que observam. Nesse exemplo o publisher é o Editor e os Listeners são EmailAlertListener e LoggingListener, por meio da interface EventListeners. A gerência da lista de inscrições é feita pela classe EventManager.

image

Relação com o Projeto

  • Notificações por email quando uma nova avaliação for enviada
  • Atualizações de página no frontend de acordo com as alterações na avaliação

Exemplos de implementação em Java

Referências

[1] https://refactoring.guru/

Tentei aplicar algumas dessas ideias na modelagem de classes que possuímos, mas percebi que teremos que revisitar nossa modelagem, fiz um esboço inicial, sem muita fidelidade aos rigores da UMl, para organizar as ideias:

image

Vou estudar Facade e Chair of Responsibility

Finalizados os estudos agora partimos para a implementação no projeto.