GRASP - belaaiza/MeAjuda GitHub Wiki

Padrões GRASP

1. Creator

Além do padrão Creator nativo da Orientação a Objetos, onde as classes criam suas próprias instâncias, houve a aplicação do padrão Creator nos relacionamentos de composição do projeto, sendo eles entre:

  • Tópico (Todo) e Avaliação (Parte): Uma avaliação deve necessariamente estar vinculada a um tópico, logo, o todo, no caso, o Tópico, deverá ser o responsável por disparar a criação da instância da parte (Avaliação).

  • Tópico (Todo) e Resposta (Parte): A resposta é uma resposta a um tópico, logo não existe resposta se não existe um tópico, dessa forma, o todo, no caso, o Tópico, deverá ser o responsável por disparar a criação da instância da parte (Resposta).

  • Escola (Todo) e Infraestrutura (Parte): Só existirá uma infraestrutura, se ela estiver vinculada à uma escola, logo o todo, a Escola, deverá ser responsável por disparar a criação da instância da parte (Infraestrutura).

  • Escola (Todo) e Endereço (Parte): De forma semelhante ao tópico acima, um endereço só existirá se estiver vinculado à uma escola, logo, o todo (Escola), deverá ser responsável por disparar a criação da instância da parte (Endereço).

Seguem as imagens dos relacionamentos em que o padrão Creator foi aplicado no diagrama de classes:

2. Controller

O padrão Controller define quem deve lidar com os eventos do sistema. No Android as Activities e Fragments disparam estes eventos, entretanto, no projeto MeAjuda? quem realmente define o que deve ser feito quando os eventos são disparados são as Presenters. Desta forma, as Activities e Fragments apenas captam os eventos, enquanto as Presenters definem o que fazer com eles, logo, são nelas que o padrão Controller foi aplicado.

Além disso, pode-ser dizer que as Presenter também são um tipo Indireção, visto que funcionam como mediadoras entre a View e a Model.

Implementação no código: Classes do pacote Presenter

3. Invenção Pura

O padrão da Invenção Pura é utilizado para atribuir um conjunto de responsabilidades altamente coeso a uma classe artificial que não represente um conceito do domínio do problema, apoiando a alta coesão, baixo acoplamento e reutilização de software. No projeto, o padrão foi aplicado através da criação de várias classes na camada DAO (Data Access Object). As classes desta camada aplicam este padrão pois:

  • São altamente coesas, isto é, cada classe tem a responsabilidade única de comunicar os dados da sua entidade referente da aplicação para o banco de dados e vice-versa.
  • São classes artificiais que não representam um conceito do domínio do problema.

Implementação no código: Classes do pacote DAO