Шаблоны проектирования и алгоритмы применения правил к фактам

Я пытаюсь сформулировать требования клиента к механизму ценообразования в розничной среде. Мы определили механизм ценообразования как работающий по набору правил ценообразования, который устанавливает новые ценовые точки для приобретенных товаров на основе существующих товаров, уже находящихся в корзине покупок.

Простое ценовое правило может быть таким: ПОЛУЧИТЕ РУБАШКУ со скидкой 40%. Более сложным правилом может быть ПОЛУЧИТЕ БЕСПЛАТНУЮ РУБАШКУ, КОГДА ВЫ ПОКУПАЕТЕ 2 БРЮКИ И ПОТРАТИТЕ МИНИМУМ 30 долларов.

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

Ранжирование позволит правилу, которое в противном случае проиграло бы, выиграть. Стекинг позволил бы выиграть нескольким правилам.

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

Понятно, что это потенциально проблема NP, и количество элементов (фактов), с которыми я буду иметь дело, может превышать 100+ на транзакцию с пересмотром цен каждый раз, когда добавляется новый элемент.


person Bill    schedule 20.02.2009    source источник
comment
Интересно, какой метод вы в итоге выбрали? Был ли это правильный выбор?   -  person cool breeze    schedule 20.01.2016
comment
Мы создали нашу собственную систему правил, в которой для решения проблемы использовались различные методы. У меня нет информации, которую можно было бы здесь рассказать, так как эта проблема была решена и реализована более 7 лет назад. В итоге мы использовали своего рода подход к локализации и применили к локализациям весовые коэффициенты. Затем мы использовали алгоритм маршрутизации с наименьшей стоимостью, чтобы определить лучшую комбинацию ценовых сделок. Готовая работа оказалась одним из моих любимых проектов - мы написали его как самостоятельный модуль, который можно было бы использовать в других местах. Правила + набор входов - ›набор выходных данных по цене.   -  person Bill    schedule 11.01.2017


Ответы (2)


Есть хорошая статья Мартина Фаулера о системе правил и о том, где их использовать. Посмотрим, поможет ли

http://www.martinfowler.com/bliki/RulesEngine.html

person Nitin Bhide    schedule 21.02.2009
comment
Я занимаюсь этим. Я читал его работы, но в последнее время не просматривал его онлайн-материалы. - person Bill; 27.02.2009

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

Если механизм правил - это лишь небольшая часть вашего приложения или, что еще хуже: это некоторый код, который не является тем же языком программирования, что и остальная часть вашего приложения ... тогда вам следует пересмотреть свое решение. Каждая часть приложения, которая является внешней по отношению к вашему основному приложению (даже база данных является внешней по отношению к Java-приложению), представляет собой риск.

Тогда есть две возможности: запрограммировать простой механизм правил самостоятельно или использовать стратегию или паттерн состояний.

person Theo Lenndorff    schedule 20.02.2009