1
resposta

Se duas regras de negócios forem atendidas?

Me surgiur a dúvida, se por exemplo eu tenho a seguinte compra na loja:

Orcamento terceiro = new Orcamento(new BigDecimal("1000"),6);

Onde o orçamento é maior que 500 e também o comprador tem mais de 5 itens.

Usando a Chain of responsability a primeira que seria atendida depende da implementação do desenvolvedor.

Nesse primeiro caso:

    Desconto desconto = new DescontoParaMaisDeCincoItens(
    new DescontoParaOrcamentoAcimaQuinhentos(
    new SemDesconto()));

ele recebe 10% de desconto pois o que será antendido é a condição de ter mais de 5 itens, já neste outro:

Desconto desconto = new DescontoParaOrcamentoAcimaQuinhentos(
                new DescontoParaMaisDeCincoItens(
                        new SemDesconto()));

O cliente teria 5% de desconto, pois o desenvolvedor colocou primeiro a regra de testar o valor acima. Então tudo vai depender do desenvolvedor, ou da regra de negócio que foi passado para ele?

1 resposta

Olá Jorge, tudo bem?

Ótima pergunta! Na verdade, a ordem das regras de negócio na Chain of Responsibility é importante, pois a primeira regra que for atendida será a que será aplicada.

No exemplo que você deu, se o desenvolvedor colocar primeiro a regra de testar o valor acima, o cliente terá 5% de desconto, pois essa regra será a primeira a ser testada e atendida.

Porém, se o desenvolvedor colocar primeiro a regra de testar a quantidade de itens, o cliente terá 10% de desconto, pois essa será a primeira regra a ser atendida.

Portanto, a ordem das regras de negócio é importante e deve ser definida de acordo com a prioridade de cada uma delas.

Espero ter ajudado e bons estudos!