Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

[Dúvida] Só eu fiquei maluco com esse Decorator pattern?

Meus Deus. Que nó na cabeça...

Eu seto uma constante que recebe uma função, que recebe uma segunda função como parâmetro e esta retorna uma terceira função que usa essa segunda função recebida pra conseguir retornar as props.

Ufa!

Demorei uns bons minutos lendo e reescrevendo o código várias vezes, mas acho que finalmente entendi.

Fiquei me perguntando: não teria uma forma mais simples (no sentido de menos confusa mesmo) de abstrair esse código? Qual exatamente é a vantagem de se utilizar um padrão de design assim?

3 respostas

Mais uma pergunta: por que colocamos a session dentro do contexto? Não seria o mesmo que passar a session diretamente pra função que retorna as props? (talvez essa seja respondida mais a frente no curso...)

solução!

Oi Dilon, tudo bem?

Entendo que o padrão de design Decorator pode parecer confuso no início, mas vou tentar explicar. O Decorator é um padrão de design que permite adicionar comportamentos extras a um objeto de forma dinâmica, sem alterar sua estrutura básica. Ele é útil quando temos a necessidade de estender as funcionalidades de um objeto de maneira flexível.

No caso específico que você mencionou, onde você seta uma constante que recebe uma função, que por sua vez recebe uma segunda função como parâmetro e retorna uma terceira função, estamos lidando com um exemplo de uso do Decorator pattern. Essa terceira função utiliza a segunda função recebida para manipular e retornar as props desejadas.

Embora possa parecer complicado à primeira vista, o padrão Decorator traz algumas vantagens. Vou destacar algumas delas:

  1. Extensibilidade: O Decorator permite adicionar comportamentos adicionais a um objeto de forma flexível, sem modificar seu código original. Isso é especialmente útil quando temos um conjunto de comportamentos diferentes que podem ser combinados ou alterados dinamicamente.

  2. Separação de responsabilidades: Com o Decorator, podemos dividir a funcionalidade em diferentes camadas. Cada decorador tem uma responsabilidade específica, o que facilita a compreensão e a manutenção do código.

  3. Reutilização de código: Ao usar o Decorator, podemos criar vários decoradores diferentes que fornecem funcionalidades adicionais. Esses decoradores podem ser usados em diferentes objetos, promovendo a reutilização de código.

A respeito da sua pergunta sobre por que colocamos a session dentro do contexto, essa é uma boa pergunta. Colocar a session no contexto é uma prática comum quando estamos trabalhando com sistemas que necessitam compartilhar informações em vários componentes.

Ao colocar a session no contexto, podemos acessá-la facilmente em qualquer lugar da nossa aplicação, sem a necessidade de passá-la explicitamente entre os componentes. Isso é particularmente útil quando precisamos acessar a session em componentes aninhados ou em componentes que não estão diretamente relacionados.

Por exemplo, suponha que temos uma função que retorna as props e precisamos acessar a session nessa função. Se passarmos a session diretamente para essa função, seria necessário passá-la por vários níveis de componentes, tornando o código mais complexo e propenso a erros.

Ao colocar a session no contexto, podemos simplesmente acessá-la em qualquer componente usando o contexto, sem a necessidade de passar explicitamente a session como argumento. Isso simplifica o código e torna a comunicação entre os componentes mais eficiente.

Espero que essa explicação tenha esclarecido suas dúvidas sobre o Decorator pattern e o uso do contexto para a session. Lembre-se de que, com a prática e a familiarização, esses conceitos se tornarão mais claros e naturais para você.

Um abraço e bons estudos.

Ótima explicação! Muito obrigado, Lorena.

Me clareou diversas questões, principalmente sobre o uso do contexto para compartilhar informações entre componentes. Realmente não sabia disso.

Sobre o decorator pattern, tenho usado em alguns projetos pessoais e realmente fica mais fácil com a familiarização.

Mais uma vez obrigado pela atenção e resposta. Abraço!