Decorator
Introdução
O padrão Decorator é uma solução estrutural que permite adicionar funcionalidades extras a um objeto de forma dinâmica, evitando modificações em sua estrutura original. Essa abordagem é ideal em projetos que requerem extensibilidade e modularidade, pois facilita a evolução do código sem comprometer a base já existente.
No projeto, o padrão Decorator foi aplicado para enriquecer a experiência do usuário em componentes visuais. Elementos como badges de desconto ou indicadores de novidade foram adicionados dinamicamente a cards e botões, garantindo flexibilidade e uma interface intuitiva. Essa técnica garante que novos comportamentos possam ser incorporados sem a necessidade de alterar diretamente os componentes fundamentais.
Metodologia
- Processo de Trabalho: A equipe trabalhou uma abordagem modular para implementar o padrão Decorator, que foi utilizado para encapsular funcionalidades adicionais, promovendo a separação de responsabilidades e reduzindo o acoplamento entre os componentes.
- Ferramentas Utilizadas: A implementação foi realizada com React Native e TypeScript, explorando a composição de componentes para criar wrappers que adicionam novos comportamentos visualmente ricos.
- Justificativa: A escolha do padrão Decorator possibilitou a criação de componentes mais flexíveis e reutilizáveis, permitindo que funcionalidades como a exibição de descontos ou estados dinâmicos fossem adicionadas sem alterar a base de código original. Isso resultou em um código mais organizado, escalável e fácil manutenção.
Exemplo de Implementação no Projeto
Decorator em ProductCard React Native
Tecnologia: React Native
Decorator implementado para adicionar funcionalidades visuais dinâmicas aos cards de produto, como a indicação de descontos no produto. Permite extensão de características sem modificar o componente base.
Implementação no código
**[Decorator.tsx](https://github.com/UnBArqDsw2024-2/2024.2_G7_Entrega_Entrega_03/blob/553596b858fe00bc8a2990a2b171e84cf9c2539d/src/HungryHub.2024.2-Front/hungryhub/src/components/ProductCard.tsx)**: Autor: Kallyne Macedo Passos
Decorator em ProfileButton React Native
Tecnologia: React Native
O padrão Decorator é observado no componente ProfileButton
, onde diferentes comportamentos e estilos são adicionados dinamicamente ao botão, dependendo da propriedade isLogout
. Esse comportamento permite adicionar funcionalidades ou modificações visuais sem alterar a estrutura base do componente.
Implementação no Código
Autor: Kauan Eiras
Justificativa Técnica
- Prós:
- A utilização do padrão Decorator neste contexto permite combinar múltiplas decorações visuais dinamicamente, o que é interessante na realidade do aplicativo para indicar descontos, observações e novidades simultaneamente.
- Permite adicionar funcionalidades visuais (badges, indicadores) sem modificar os componentes base.
- Mantém o código modular e facilita testes unitários.
-
Possibilita ativar/desativar decorações baseado em regras de negócio.
-
Contras:
- Pode aumentar a complexidade de renderização em componentes aninhados.
- Risco de performance com muitos decorators encadeados.
- Possível complexidade adicional na gestão de props e estados.
- Em casos mais simples, pode ser substituído por composição base de componentes React.
Referências
- HEWAWASAM, Lakindu. Using GoF design patterns with React. Blog Bits and Pieces, 4 maio 2023. Disponível em: https://blog.bitsrc.io/using-gof-design-patterns-with-react-c334f3ea3147. Acesso em: 17 dez. 2024.
- Dev Junior Alves. Como Aplicar Design Patterns do GoF em React.js com TypeScript?!. Youtube, 19 dezembro 2024. Disponível em: https://www.youtube.com/watch?v=t9wKmfFVgJQ. Acesso em: 02 jan. 2024.
- AWAN, Talha. GOF Design Patterns in React JS. TecHighness. 21 maio 2022. Disponível em: https://www.techighness.com/post/gof-design-patterns-react-js/. Acesso em: 02 jan. 2024.
Histórico de Versões
Versão | Data da alteração | Comentário | Autor(es) | Revisor(es) | Data de revisão |
---|---|---|---|---|---|
1.0 | 05/01/2025 | Criação do documento | Kallyne Macedo Passos | Kauan Eiras | 06/01/2025 |
1.1 | 06/01/2025 | Adição de exemplo de implementação no projeto | Kauan Eiras | Kallyne Macedo Passos | 06/01/2025 |
1.2 | 06/01/2025 | Adição de introdução e metodologia | Bruno Araújo | Kallyne Macedo Passos | 06/01/2025 |
1.3 | 06/01/2025 | Adição de justificativa técnica | Kallyne Macedo Passos | Kauan Eiras | 06/01/2025 |