Разработка шаблонов и алгоритмов для применения правил к фактам - PullRequest
16 голосов
/ 21 февраля 2009

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

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

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

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

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

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

Ответы [ 2 ]

5 голосов
/ 21 февраля 2009

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

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

2 голосов
/ 21 февраля 2009

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

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

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

...