Ir para o conteúdo

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

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 Estruturais. A entrega consiste na apresentação dos GoFs Estruturais 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 Estruturais são responsáveis por abstrair a estrutura de classes e objetos, fornecendo uma maneira de compor objetos para obter novas funcionalidades. Eles são utilizados para facilitar a composição de objetos e definir como as classes e objetos se relacionam. (GAMMA et al., 1994)

Eles são divididos em sete categorias:

  • Adapter: Permite que objetos com interfaces incompatíveis trabalhem juntos.
  • Bridge: Separa uma abstração de sua implementação, permitindo que ambas possam variar independentemente.
  • Composite: Permite que os clientes tratem objetos individuais e composições de objetos de maneira uniforme.
  • Decorator: Adiciona responsabilidades a objetos de forma dinâmica.
  • Facade: Fornece uma interface unificada para um conjunto de interfaces em um subsistema.
  • Flyweight: Permite o compartilhamento de objetos para suportar um grande número de objetos finos.
  • Proxy: Fornece um substituto ou marcador de um objeto para controlar o acesso a ele.

Metodologia

Processo de Trabalho

Para a implementação dos padrões GoF Estruturais, 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 Estruturais.

Nosso objetivo era começar o desenvolvimento das histórias de usuário, e ao longo do desenvolvimento definir quais padrões Estruturais 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 Estruturais 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 Estruturais podem ser aplicados para:

  • Facilitar a composição de objetos: Permitindo que objetos com interfaces incompatíveis trabalhem juntos.

  • Definir como as classes e objetos se relacionam: Separando uma abstração de sua implementação, permitindo que ambas possam variar independentemente.

  • Adicionar responsabilidades a objetos de forma dinâmica: Permitindo que os clientes tratem objetos individuais e composições de objetos de maneira uniforme.

  • Fornecer interfaces unificadas para um conjunto de interfaces em um subsistema: Permitindo o compartilhamento de objetos para suportar um grande número de objetos finos.

Existem também algumas desvantagens, pois a aplicação dos padrões pode:

  • Aumentar a complexidade do código: A aplicação dos padrões pode tornar o código mais complexo e difícil de entender.

  • Dificultar a manutenção: A aplicação dos padrões pode dificultar a manutenção do código, tornando-o mais difícil de modificar.

Além disso as tecnologias não são necessariamente adequadas para a aplicação de todos os padrões, o que pode dificultar a implementação.

A seguir, os links para os padrões GoF Estruturais 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/2024 Criação do documento Felipe Amorim de Araújo Bruno Araújo 06/01/2025