Стоимость декораторов - PullRequest
0 голосов
/ 01 июня 2009

Для каждого продукта есть соответствующие калькуляторы затрат, такие как: скидка, скидка продавца, бонус продавца, ежемесячная скидка и т. Д. В будущем будет добавлено больше калькуляторов стоимости.

У нас есть конкретный класс продукции и множество декораторов для каждого расчета стоимости. Все продукты должны использовать все калькуляторы, потому что калькуляторы решают применить свои вычисления к свойствам продукта, таким как идентификатор продавца продукта, идентификатор категории, цвет и т. Д.

И есть миллионы продуктов в нашей системе, которые необходимо рассчитать. Итак, лучше кешируем оформленные калькуляторы. Потому что декорирование каждой сущности продукта во время выполнения будет дорогостоящим. Но это сложно с шаблоном декоратора. Похоже на запах использовать этот шаблон в нашей ситуации.

Что вы предлагаете? Должны ли мы использовать декораторы, стратегию или шаблон цепочки ответственности? Или без шаблона.

Ответы [ 2 ]

3 голосов
/ 01 июня 2009

В шаблоне стратегии намерение объекта изменяется.

Поэтому, я думаю, стратегия была бы хорошим выбором.

0 голосов
/ 01 июня 2009

Все продукты должны использовать все калькуляторы, потому что калькуляторы решили применить свои расчеты свойства продукта, такие как продукт идентификатор продавца, идентификатор категории, цвет и т. д.

Если вам нужно, чтобы во всех продуктах использовались все декораторы, то вы на самом деле не получаете никакой выгоды от паттерна. Означает ли это, что если вы реализуете новый декоратор, все существующие объекты должны быть обновлены, чтобы использовать этот новый декоратор?

Декораторы должны применяться к продуктам только при необходимости, и должны применяться только те декораторы, которые необходимы.

Я думаю, вы должны удалить решение изнутри декораторов; что-то еще должно решить, следует ли применять декоратор, и в этом случае он упаковывает продукт в соответствующих декораторов. Таким образом, вы знаете, что, если товар упакован в декораторе, этот декоратор влияет на продукт.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...