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
- GAMMA, Erich et al. Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, 1994.
- HEWAWASAM, Lakindu. Using GoF design patterns with React. Blog Bits and Pieces, 4 maio 2023. Disponível em: https://blog.bitsrc.io/
- META. React Native: Getting Started. Disponível em: https://reactnative.dev/docs/getting-started. Acesso em: 6 jan. 2025.
- 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 |