1
resposta

Dúvidas sobre o chain of responsibility

Como poderíamos implementar o exemplo da calculadora de descontos nos seguintes cenários distintos:

a - Aplicar sempre o mais desconto possível dentre um conjunto de regras b - Aplicar descontos cumulativos caso as condições de mais de um desconto sejam atendidas c - Permitir desabilitar regras de desconto de forma dinâmica (ex: o usuário habilitaria ou desabilitaria regras a partir de uma interface no sistema). Como fazer para obter os descontos ativos naquele momento e montar a cadeia?

1 resposta

Olá Bruno, tudo bem?

O Chain of Responsibility é um padrão de design que pode ser muito útil para implementar cenários como o da calculadora de descontos. Vamos às suas perguntas:

a - Para aplicar sempre o desconto mais alto dentre um conjunto de regras, você pode implementar o Chain of Responsibility de forma que cada nó da cadeia represente uma regra de desconto. Cada nó deve verificar se a condição para aplicar o desconto é atendida e, se for o caso, aplicar o desconto e encerrar a cadeia. Se a condição não for atendida, o nó deve passar a requisição para o próximo nó da cadeia. Dessa forma, o desconto mais alto será aplicado primeiro, pois as regras mais vantajosas estarão no início da cadeia.

b - Para aplicar descontos cumulativos caso as condições de mais de um desconto sejam atendidas, você pode implementar o Chain of Responsibility de forma que cada nó da cadeia represente uma regra de desconto, assim como no cenário anterior. No entanto, cada nó deve verificar se a condição para aplicar o desconto é atendida e, se for o caso, aplicar o desconto e continuar a cadeia, passando a requisição para o próximo nó. Dessa forma, todos os descontos cujas condições forem atendidas serão aplicados.

c - Para permitir desabilitar regras de desconto de forma dinâmica e obter os descontos ativos naquele momento, você pode implementar o Chain of Responsibility de forma que cada nó da cadeia represente uma regra de desconto habilitada ou desabilitada. Você pode ter uma classe responsável por gerenciar a cadeia de descontos, que seria responsável por montar a cadeia de nós habilitados e passar a requisição para o primeiro nó da cadeia. Dessa forma, você pode habilitar ou desabilitar regras de desconto dinamicamente, e a cadeia de descontos será montada de acordo com as regras habilitadas no momento da requisição.

Espero ter ajudado e bons estudos!