Какой паттерн проектирования лучше использовать для работы со скидками?
Есть объект цена, которая знает определенные данные о товаре.
К цене могут примерятся различные скидки, которые применяются зависимости от различных параметров. (категория товара, день недели, текущий пользователь)
Необходимо присвоить цены и скидки на группу товаров. Как это лучше всего сделать, не прибегая к куче foreach и if.
Пока смотрю в сторону компоновщика, но может есть более специализированный паттерн?
В книге Фаулера "Рефакторинг" в 1 главе пример про расчет цены фильмов в видеопрокате очень напоминает ваш вопрос. Думаю, не будет лишним вам ознакомиться.
Вы имеете ввиду хранимые процедуры? Я думаю в последствии работа со скидками будет усложнена, будут приоритет скидок, наличие конечных скидок (Если она применена, то последующие скидки не работают) и.т.д
Стратегия была бы актуальна, если бы была бы одна скидка и нам бы выбирали нужную от текущего контекста. Но их может быть много, скидки не знают нечего друг о друге, но результат одной может повлиять на всю скидку (если попалась конечная скидка, допустим)
Dmitriy Ronzhin: не понял на самом деле проблемы, у вас все скидки это стратегия, если конкретнее стратегия расчёта цены, в стратегию вы можете добавлять сколько угодно видов скидок отдельными объектами и вообще все что вам вздумается, на то она и стратегия. В зависимости от того с какими скидками вы создали стратегию, идёт её расчёт.