Занят, глядя на похожую ситуацию и считаю, что шаблон декоратора - хороший вариант.
http://www.dofactory.com/Patterns/PatternDecorator.aspx
Отъезд: http://www.itarchitect.co.uk/articles/display.asp?id=357
Ура
Также проверьте, нет ли шаблона типа страта, который я ищу для реализации скидок: Стратегия скидок в корзине и заказах
Мне жаль, что приходится это говорить, , но, похоже, вам придется применить какую-то систему правил ценообразования, чтобы получить то, что вы ищете .
Похоже, что вы должны
В общем, существует множество возможных правил/комбинаций, которые можно придумать, и вы, как разработчик, можете реализовать их и скрыть от пользователя, или позволить пользователю создать их, , но кто-то должен это сделать .
А потом, когда Вы не хотите реализовывать свои собственные, GOOGLE shold предоставляет:
Мы используем механизм правил для этого типа сложных вычислений. Наша платформа - это Java, и мы используем Drools (чем мы довольны). Drools также доступен для .Net. Вот список Rules Engine с открытым исходным кодом для .NET .
Есть много способов добиться этого, но я думаю, что наиболее полезным для вас будет определение DSL, который вы можете использовать для выражения своих скидок в таких способ, которым их можно легко объяснить и рационализировать с бизнес-пользователями. Пример из одной из статей ayende о DSL в boo :
apply_discount_of 5.percent:
when order.Total > 1000 and customer.IsPreferred
when order.Total > 10000
suggest_registered_to_preferred:
when order.Total > 100 and not customer.IsPreferred
Как видите, это то, что вы можете распечатать и показать клиенту, и он сразу поймет что происходит.
Конечно, разработка чего-то подобного отнимает много времени, дорого и чревата причудливыми крайними случаями. Однако у него есть преимущество в том, что это код, который можно тестировать, выполнять и отлаживать.
Если boo не для вас, то, возможно, вам стоит определить что-то подобное в ironruby, ironpython или F #. Однако я бы посоветовал держаться подальше от XML для определения этих правил, если вы действительно не наслаждаетесь миром боли.
Однако именно для этого были разработаны такие продукты, как Biztalk. Какие механизмы правил вы оценили и обнаружили, что у них нет?