Просто очень общий вопрос, который относится не только к этому примеру.
Допустим, у вас есть Интернет-магазин, и вы хотите реализовать ваучеры / подарочные сертификаты, но с ограничениями. Допустим, у вас есть ваучер со скидкой 20%, но он распространяется только на товары, добавленные в течение последних 3 недель, но не на товары, которые были в специальной акции.
Я вижу два способа решить эту проблему: Первый - кодировать ваш магазин, чтобы «изначально» поддерживать все сумасшедшие типы ваучеров. Кажется, это классический способ, но это требует большой работы заранее и очень малой гибкости (в конце концов, вы не можете заранее знать, что вам нужно, и, возможно, Sales может предложить действительно отличную новую акцию, которая требует новых ваучеров - к следующему понедельнику).
Второй способ - это плагин: ваучеры похожи на плагины, и каждый ваучер имеет свой собственный код. Вы передаете корзину покупок в ваучер, а затем сам ваучер проверяет каждый товар, если он применяется, вносит необходимые изменения и возвращает измененную корзину покупок.
Мне просто интересно, что такое шаблон проектирования для случая 2? Это немного похоже на IoC / DI, но опять же не совсем, потому что ваучеры не заменяют какой-либо существующей функциональности. Это больше похоже на набор объектов со специальным интерфейсом (например, IVoucher), а затем на очередь объектов IVoucher, которая перебирается. Существует ли стандартная схема (и лучшая практика) для этих типов «манипуляторов»?
Редактировать: Спасибо за ответы. Чтобы прояснить это немного, Ваучеры (или Манипуляторы - как уже говорилось, речь идет не только об онлайн-магазинах, но и о похожих ситуациях) - это «тяжелые» объекты, то есть в них есть Business Logic. Таким образом, я могу сказать, что Ваучер применяется только в том случае, если Клиент зарегистрировался до 1 января 2008 года, только если клиент заказал по крайней мере 100 долларов США за последние 6 месяцев, применяется только к статьям категории X, которые «складываются» с другими Ваучерами, кроме для предметов, помеченных как уменьшенные и т. д. и т. д. Итак, я больше беспокоился о том, как сохранить чистую структуру, чтобы убедиться, что ваучеры получают все, что им нужно, чтобы проверить, применимы ли они, и чтобы иметь возможность манипулировать корзиной, поэтому я удивился о том, что является стандартом для таких ситуаций, и именно это, по-видимому, делает шаблон посетителя.