Ir para o conteúdo

GRASPs e GoFs: API

Histórico de revisões

Data Versão Descrição Autor(es)
20/05/2019 0.1 Adicionando Factory Method Gabriel Carvalho
20/05/2019 0.2 Relacionando com GRASP Ezequiel Oliveira
27/06/2019 0.3 Reestruturando documento Guilherme Guy
27/06/2019 0.4 Adicionando GOF Composite Guilherme Guy
27/06/2019 0.5 Adicionando GRASP Polimorfismo Guilherme Guy
28/06/2019 0.6 Adicionando GOF Proxy Gabriel Carvalho
29/06/2019 0.7 Adicionando GOF Chain of responsability Joberth Rogers
29/06/2019 0.8 Adicionando grasp Baixo acoplamento Joberth Rogers

GOFs utilizados

1. Factory Method
2. Composite
3. Proxy

GRASPs utilizados

1. Information Expert
2. Polimorfismo

GOFS

Factory Method

Factory Method é um padrão de projeto criacional que nos permite abstrair detalhes de implementação de criação de objetos do mundo externo. Express faz isso exportando apenas o construtor.

A função do framework que faz a criação da aplicação:

Factory - Function

Importação e chamada da função na API:

Factory - Declaration

Composite

Dentro do módulo algorithm podemos encontrar o módulo restrictions, que fornece restrições para o algorítimo genético. As restrições foram feitas de forma a seguir o GOF Composite, permitindo sua agregação no composite e facilitando a utilização destes objetos como uma coleção.

api-composite

Proxy

No Express.js, as rotas fazem a função de proxy. Elas são responsáveis por interceptar os requests e encaminhar-los aos seus, respectivos, middlewares.

api-proxy

Chain of responsability

Antigamente no endpoint "search" ao realizar as consultas, executavam-se várias queries encadeada para verificar os possíveis resultados na pesquisa. Devido a esse fator, o código tornou-se altamente acoplado e muito difícil de ser refatorado. Após observar vários padrões de projeto, pode se perceber que o padrão Chain of responsability era um dos padrões que servia como solução para os problemas encontrados acima, pois era necessário consultar o nome da disciplina, nome do professor e código da disciplina no banco de dados de acordo com o body da requisição e o Chain of responsability é um dos padrões que tem como responsabilidade usar a ideia do middleware, passando a responsabilidade para a próxima consulta até o resultado ser encontrado. Após aplicado o padrão, pode-se perceber o quão organizado o código ficou, já que agora estava menor e modularizado, além de menos acoplado. Um ponto forte a se destacar também, é a possibilidade de novas opções de pesquisa que podem ser adicionadas futuramente caso seja necessário, graças a flexibilidade que aplicação do padrão proporciona.

search-chain

Grasps

Information Expert:

Importação e chamada da função na API:

Factory - Declaration

No trecho de codigo pode-se notar que o express consegue instanciar seu objeto único, considerando-o especialista pois ele tem a responsabilidade de gerar um objeto usado ao longo do codigo.

Polimorfismo

Podemos perceber grande uso do polimorfismo no módulo restriction, em que cada classe de Restrictions tem um comportamento único, sendo todas herdeiras da classe Restriction

api-composite

Baixo acoplamento

Podemos perceber o uso desse Grasp no Chain of responsability, devido ao grau de independência entre cada elemento da "chain". Nenhum desses elemento sabem da existência do outro, apenas passa a responsabilidade para o proximo, caso o elemento atual que irá tratar a resquisição não atenda as regras de negócio estabelecidas.