Ir para o conteúdo

3.1. Módulo Padrões de Projeto GoFs Comportamentais

Introdução

Este documento detalha a entrega do Foco 01 do Módulo Padrões de Projeto GoFs, que se refere aos Padrões GoF Comportamentais. A entrega consiste na apresentação dos GoFs Comportamentais implementados no projeto, evidenciando tanto o nível de modelagem quanto o nível de implementação dos padrões de acordo com o documento de diretrizes do projeto.

Os padrões GoF Comportamentais são responsáveis por abstrair o comportamento de classes e objetos, fornecendo uma maneira de definir como os objetos interagem entre si. Eles são utilizados para facilitar a comunicação entre objetos e definir como os objetos se comunicam. (GAMMA et al., 1994)

Eles são divididos em onze categorias:

  • Chain of Responsibility: Permite que vários objetos possam ter a oportunidade de tratar uma solicitação.
  • Command: Encapsula uma solicitação como um objeto, permitindo parametrizar clientes com solicitações, enfileirar solicitações e registrar solicitações.
  • Interpreter: Define uma representação gramatical para um idioma e fornece um interpretador para interpretar sentenças nesse idioma.
  • Iterator: Fornece uma maneira de acessar os elementos de um objeto agregado sequencialmente sem expor sua representação subjacente.
  • Mediator: Define um objeto que encapsula como os objetos interagem entre si, promovendo o baixo acoplamento entre eles.
  • Memento: Permite capturar e restaurar o estado interno de um objeto sem violar a encapsulação.
  • Observer: Define uma dependência um-para-muitos entre objetos, de modo que quando um objeto muda de estado, todos os seus dependentes são notificados e atualizados automaticamente.
  • State: Permite que um objeto altere seu comportamento quando seu estado interno muda.
  • Strategy: Define uma família de algoritmos, encapsula cada um deles e os torna intercambiáveis.
  • Template Method: Define o esqueleto de um algoritmo em uma operação, adiando alguns passos para subclasses.
  • Visitor: Representa uma operação a ser executada nos elementos de uma estrutura de objetos.

Metodologia

Processo de Trabalho

Para a implementação dos padrões GoF Comportamentais, a equipe adotou uma abordagem que priorizaria o desenvolvimento em código do aplicativo utilizando as tecnologias já previamente definidas durante o planejamento do projeto.

  • React Native: Utilizado para o desenvolvimento do aplicativo móvel.
  • Django: Utilizado para o desenvolvimento do backend do aplicativo.

As histórias de usuário elicitadas durante a última entrega serviram para guiar a equipe no desenvolvimento das funcionalidades do aplicativo, e, consequentemente, na aplicação dos padrões GoF Comportamentais.

Nosso objetivo era começar o desenvolvimento das histórias de usuário, e ao longo do desenvolvimento definir quais padrões Comportamentais seriam mais adequados para a implementação de cada funcionalidade e documentá-los de acordo com as diretrizes do projeto.

O documento de rastreabilidade com as histórias de usuário detalha mais claramente as relações entre histórias de usuário, issues, branches e pull requests: link

A seguir também o link para as issues no nosso GitHub Projects: link

Reuniões onde foi planejado o processo de trabalho da equipe

Ressalva em Relação as Tecnologias Utilizadas

Durante o desenvolvimento do projeto, a equipe optou por utilizar as tecnologias React Native e Django para o desenvolvimento do aplicativo móvel e do backend, respectivamente. A escolha dessas tecnologias foi feita com base na experiência prévia da equipe e na adequação das tecnologias ao escopo do projeto.

É importante ressaltar que por conta da escolha dessas tecnologias, e da natureza das mesmas, a implementação dos padrões GoF Comportamentais pode não ser tão evidente quanto em outras tecnologias mais orientadas à objetos, como Java, por exemplo. No entanto, a equipe se esforçou para aplicar os padrões da melhor forma possível, considerando as particularidades.

Aplicação dos Padrões GoF Criacionais

No React Native e no Django, os padrões GoF Comportamentais podem ser aplicados para:

React Native:

  • Vantagens

  • Gestão de estado e comunicação entre componentes:

  • Padrões como Observer podem ser úteis para gerenciar estados de aplicativos em tempo real e garantir que as mudanças no estado sejam refletidas em componentes relevantes.
  • Command facilita a desacoplagem de ações dos componentes da interface.

  • Flexibilidade e extensibilidade:

  • Padrões como Strategy permitem que componentes ajustem seu comportamento dinamicamente, o que é útil para tratar diferentes plataformas ou temas.

  • Redução de dependências diretas:

  • Usar Mediator pode simplificar a comunicação entre múltiplos componentes, evitando dependências diretas que podem dificultar a manutenção.

  • Desvantagens

  • Complexidade adicional:

  • Implementar padrões comportamentais pode aumentar a complexidade inicial do código, especialmente para equipes menos experientes.

  • Overhead em performance:

  • Alguns padrões, como Observer, podem causar problemas de desempenho em aplicativos móveis, caso as notificações entre objetos sejam muito frequentes.

  • Dificuldade na depuração:

  • Padrões como Chain of Responsibility podem dificultar o rastreamento do fluxo de execução, tornando a depuração mais desafiadora.

Django:

  • Vantagens

  • Separação de responsabilidades:

  • Padrões como Template Method podem ser aplicados em views e templates, promovendo uma estrutura mais limpa para as funções reutilizáveis.

  • Facilidade na extensão de funcionalidades:

  • Command pode ser útil para a criação de comandos de linha de comando personalizados no Django, favorecendo a reutilização de lógica.

  • Manutenção e testes:

  • Usar Strategy em formulários ou validações permite testar diferentes variações de comportamentos de maneira isolada.

  • Desvantagens

  • Curva de aprendizado:

  • Para desenvolvedores menos experientes com o Django, aplicar padrões comportamentais pode ser confuso, especialmente se o código-base já for complexo.

  • Possível sobreengenharia:

  • A introdução de padrões como Interpreter ou Visitor pode ser desnecessária e tornar o código mais difícil de entender e manter.

  • Integração com o ORM:

  • Alguns padrões, como Observer, podem ser difíceis de aplicar de maneira eficiente com o ORM do Django, já que a comunicação direta entre modelos pode não ser natural.

A seguir, os links para os padrões GoF Comportamentais implementados no projeto, contendo introdução, metodologia, implementações no código fonte e referências:

As implementações em código em cada documento foram detalhadas com prints do código fonte (utilizando a extensão CodeSnap do VSCode) e links para os arquivos no repositório do projeto, explicando como os padrões foram aplicados e justificando as escolhas feitas.

Referências

  1. GAMMA, Erich et al. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1994.
  2. HEWAWASAM, Lakindu. Using GoF design patterns with React. Blog Bits and Pieces, 4 maio 2023. Disponível em: https://blog.bitsrc.io/
  3. META. React Native: Getting Started. Disponível em: https://reactnative.dev/docs/getting-started. Acesso em: 6 jan. 2025.
  4. DJANGO SOFTWARE FOUNDATION. Django Documentation: Version 5.1. Disponível em: https://docs.djangoproject.com/en/5.1/. Acesso em: 6 jan. 2025.

Histórico de Versões

Versão Data da alteração Comentário Autor(es) Revisor(es) Data de revisão
1.0 06/01/2025 Criação do documento Felipe Amorim de Araújo Raquel Ferreira Andrade 06/01