Skip to content

Aplicação GoF's Criacionais

1. Versionamento

Versão Data Descrição Autor(es)
1.0 16/03/2022 Abertura do documento João Moura e Rafael Ramos
1.1 16/03/2022 Adição da aplicação do Factory Method João Moura e Rafael Ramos
1.2 16/03/2022 Adição da aplicação do Builder João Moura e Rafael Ramos
1.3 18/03/2022 Adição dos exemplos de modelagem João Moura e Rafael Ramos
1.3.1 18/03/2022 Correções de texto João Moura e Rafael Ramos
1.3.2 19/03/2022 Revisão por pares Brenno e Thiago

2. Introdução

Após estudo dos padrões GoFs criacionais, iremos demonstrar como eles podem ser aplicados no nosso contexto de estudo do backend, isso é, utilizando Python em conjunto com o Framework Django, de forma que os padrões possam ser utilizados a fim de colaborarem com um melhor desenvolvimento do código e padronização.

3. Metodologia

A metodologia utilizada para a elaboração do documento consistiu na reunião dos membros responsáveis por esta tarefa via Discord, onde foram levantados alguns padrões de GoF's criacionais encontrados ou não no código desenvolvido para o projeto. Sendo assim, serão demonstrados dois padrões de projetos, sendo eles: Factory Method e Builder. Vale ressaltar que o documento está sujeito a atualizações, caso o grupo sinta necessidade de apresentar novos padrões, ou até mesmo atualizar os já existentes.

4. GoF's Criacionais

4.1 Factory Method

A Factory Method é um padrão de projeto criacional que através de herança e polimorfismo permitem às classes herdarem métodos que serão implementados apenas pelas subclasses.

Entendendo esse conceito, parte-se então para sua implementação no backend. O django-rest utiliza as ideias de serializers, que "traduzem" as informações. Nessa implementação, existem diversos métodos que podem ser sobrescritos e que repassam suas responsabilidades para as subclasses respectivas, sendo viável a utilização desse padrão de projeto criacional.

Para tanto, foi necessário ser feita uma refatoração dos modelos já existentes de Usuário, Produtor e Técnico para comportarem esse padrão. Uma dessas alterações foi a retirada completa do fluxo create existente no serializer de Usuário, passando-se as responsabilidades desse método para as classes de Produtor e Técnico. Dessa forma, o código resultante que representa esse GoF Criacional pode ser visto abaixo.

4.1.1 Modelagem


Figura 1: Modelagem do método de fábrica no projeto

Fonte: Autores

4.1.2 Aplicação


Figura 2: Serializer de usuário

Fonte: Autores


Figura 3: Serializer de produtor

Fonte: Autores


Figura 4: Serializer de técnico

Fonte: Autores

4.2 Builder

O Builder é um padrão de projeto criacional que permite a instanciação de um objeto complexo através de uma simples solicitação, mantendo todo o processo complexo de criação oculto para o cliente.

Um importante requisito do nosso projeto é a conversão dos dados de uma caderneta para o formato pdf que será utilizado quando o produtor encerra uma plantação, este pdf pode ser considerado um objeto complexo permitindo a implementação do padrão Builder para permitir uma construção simples e rápida.

4.2.1 Modelagem


Figura 5: Modelagem do builder no projeto

Fonte: Autores

4.2.2 Aplicação


Figura 6: Builder abstrato

Fonte: Autores


Figura 7: Builder concreto de técnico

Fonte: Autores


Figura 8: Builder concreto de produtor

Fonte: Autores


Figura 9: Diretor

Fonte: Autores