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
- 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/2024 | Criação do documento | Felipe Amorim de Araújo | Bruno Araújo | 06/01/2025 |