Realizar estudo sobre os Grasps e Gofs
Closed this issue · 1 comments
Descrição
Essa tarefa foi iniciada desde terça (22/02)
Critérios de Aceitação:
Aqui critérios de aceitação
Tarefas:
- Estudar grasps
- Esudar gofs
- Escolher graps e gofs para o nosso projeto
GRASP (General Responsibility Assignment Software Patterns)
Os padrões GRASP fornecem uma abordagem sistemática para a atribuição de responsabilidades às classes do projeto.
Basicos
-
Controller:
- Problema: Quem deve ser responsável por criar uma nova instância de uma classe?
- Solução: Atribua à classe B a responsabilidade de criar uma instância de A se pelo menos um desses for verdadeiro (quanto mais melhor):
-
Creator
- Problema: Quem deve ser o responsável por lidar com um evento de
uma interface de entrada? - Solução: Atribuir a responsabilidade de receber ou lidar com um evento do sistema para uma classe que representa todo o sistema (controlador de fachada – front controller), um subsistema e um cenário de casos de uso (controlador de caso de uso ou sessão).
- Objeto: O controlador é o primeiro objeto fora da camada de interface com o usuário a receber ou tratar uma mensagem para o sistema.
- Um objeto Controlador para todo o sistema
- Um objeto Controlador por Caso de Uso (ou por cenário
de Caso de Uso)
- Problema: Quem deve ser o responsável por lidar com um evento de
Avançados
-
Pure fabrication
-
Problema: Que objeto deve ter a responsabilidade quando você não quer violar
"Alta Coesão" e "Baixo Acoplamento", mas as soluções oferecidas
pelo "Especialista" não são apropriadas?Atribuir responsabilidade apenas para as classes do domínio
conceitual pode levar a situações de maior acoplamento e menor
coesão. -
Solução: Atribua um conjunto coeso de responsabilidades a uma classe
artificial que não representa um conceito no domínio da aplicação,
uma classe fictícia que possibilite alta coesão, baixo acoplamento e o
reuso
- Indirection
- Problema: Onde colocar uma responsabilidade de modo a evitar o
acoplamento direto entre duas ou mais classes?
Como desacoplar objetos de modo a possibilitar o baixo
acoplamento e manter alta a possibilidade de reuso? - Solução: Atribua a responsabilidade a um objeto intermediário que faça a
mediação entre componentes ou serviços de modo que eles não
sejam diretamente acoplados.
O objeto intermediário cria uma camada de indireção entre os dois
componentes que não mais dependem um do outro: ambos
dependem da indireção
-
Gof ("Gangue dos Quatro")
Criacional
-
Builder: encapsular a construção de um produto e permitir que ele seja construído em etapas (https://refactoring.guru/design-patterns/builder)
-
Abstract Factory: permite que um cliente crie famílias de objetos sem especificar suas classes concretas(https://refactoring.guru/design-patterns/abstract-factory#:~:text=Abstract%20Factory%20is%20a%20creational,without%20specifying%20their%20concrete%20classes.)
Estruturais
-
Decorator: envelopa um objeto para fornecer novos comportamentos(https://refactoring.guru/design-patterns/decorator)
-
Proxy: envelopa um objeto para controlar o acesso a ele (https://refactoring.guru/design-patterns/proxy)
Comportamental
-
Command: encapsula uma solicitação como um objeto(https://refactoring.guru/design-patterns/command)
-
Strategy: encapsula comportamentos intercambiáveis e usa a delegação para decidir qual deles será usado (https://refactoring.guru/design-patterns/strategy)
Fonte
http://www.facom.ufu.br/~bacala/ESOF/05a-Padr%C3%B5es%20GRASP.pdf
https://refactoring.guru/design-patterns/abstract-factory#:~:text=Abstract%20Factory%20is%20a%20creational,without%20specifying%20their%20concrete%20classes.