Pergunta

Para cada produto lá estão associados calculadoras custo como:. Desconto, desconto pelo comerciante, bônus pelo comerciante, desconto mensal etc. No futuro, mais calculadoras custo seria acrescentado

Nós temos uma classe de produto concreto e muitos decoradores para cada cálculo de custos. Todos os produtos devem utilizar todas as calculadoras, porque as calculadoras decidir aplicar seus cálculos por propriedades do produto como código de comerciante do produto, categoria ID, cor etc.

E, existem milhões de produtos em nosso sistema que precisa ser calculado. Então, é melhor armazenar em cache as calculadoras decorados. Porque, decorando cada entidade do produto em tempo de execução seria caro. Mas isso é difícil com padrão de decorador. Parece que um cheiro de usar esse padrão em nossa situação.

O que você sugere? Devemos usar decoradores, estratégia ou padrão de cadeia de responsabilidade? Ou não-padrão.

Foi útil?

Solução

Todos os produtos devem usar todo o calculadoras, porque as calculadoras decidir aplicar seus cálculos as propriedades do produto, como produto ID do comerciante, categoria ID, cor etc.

Se você precisa ter todos os produtos usar todos os decoradores, então você não está realmente ganhando qualquer benefício a partir do padrão. Isso significa que se você implementar um novo decorador, todas as entidades existentes devem ser atualizados para usar esse novo decorador?

decoradores deve ser aplicada a produtos somente quando necessário, e apenas os decoradores que são necessários devem ser aplicadas.

Eu acho que você deve remover a decisão de dentro dos decoradores; outra coisa deve decidir se deseja aplicar um decorador, caso em que envolve o produto nas decoradores apropriadas. Desta forma, você sabe que se um produto é envolto em um decorador, que decorador está afetando (efetuando?) Do produto.

Outras dicas

Em um padrão de estratégia, a intenção do objeto muda.

Por isso, acho que a estratégia seria uma boa escolha.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top