Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Chain of Responsability e Código hadouken

Fala professor tudo certo?

Fiquei com uma dúvida sobre a aplicação do pattern Chain of Responsability em uma aplicação bem semelhante a comentada no curso: Trabalho em uma empresa que tivemos essa mesma aplicação de descontos (Só que sem design pattern) e ao todo foram feitas em torno de 15 lógicas de decisão no sistema.

Ao ver esse pattern imediamente pensei nisso e me questionei: Será que para um problema desses o código não ficaria muito longo (meio que um código hadouken) ? e existe alguma forma de não cair nisso?

Talvez eu até esteja pensando no Pattern errado para solucionar esse problema...

Exemplo:

class CalculadoraDeDescontos {
    public function calcular(Quote $quote) : float {
        $cadeiaDescontos = new DescontoItemAssociadoNoCarrinho(
            new DescontoMaisDe2ProdMesmaEmpresa(
                new DescontoMaisDe10Prod(
                    new DescontoMaisDe1500Valor(
                        new DescontoMaisDe500Valor(
                            new NenhumDesconto()
                        )
                    )
                )
            )
        );

        return $cadeiaDescontos->calcular($quote);
    }
}
1 resposta
solução!

Olá, William.

Normalmente esse código estaria em um arquivo de configuração de injeção de dependência, e além disso, quando a corrente é grande, você pode quebrar em várias linhas:

$semDesconto = new NenhumDesconto();
$maisDe500Valor = new DescontoMaisDe500Valor($semDesconto);
$maisDe1500Valor = new DescontoMaisDe1500Valor($maisDe500Valor);
$maisDe10Produtos = new DescontoMaisDe10Prod($maisDe1500Valor);
$doisProdutosMesmaEmpresa =  new DescontoMaisDe2ProdMesmaEmpresa($maisDe10Produtos);

$cadeiaDescontos = new DescontoItemAssociadoNoCarrinho($doisProdutosMesmaEmpresa);