Как реализовать модель ценообразования в Java EE с помощью механизма правил?

Я разрабатываю приложение Java EE 6, в котором «поставщики» должны иметь возможность определять цену и различные скидки на услуги для пользователей. Есть много разных провайдеров. Каждый из них предоставляет одну и ту же услугу, модели ценообразования могут быть разными.

Ценовая модель: - Поставщик должен иметь возможность определять цену, например. в час, в минуту, за процесс, ... . - Поставщик должен иметь возможность легко добавлять условия для определения скидки, которую получает пользователь. Например: пользователи из определенной группы пользователей получают скидку 10%, а пользователи, воспользовавшиеся услугой более 5 раз, получают еще одну скидку. - Должна быть возможность связывать условия с логическими операциями, такими как «И» или «ИЛИ». - Количество возможных условий должно быть определено производителем программного обеспечения.

  • Когда пользователь пытается получить доступ к услуге, должна отображаться цена для конкретного пользователя. После использования услуги конкретный пользователь когда-нибудь получает счет, в котором указана общая стоимость этой услуги. При использовании сервиса провайдер может изменить модель ценообразования, поэтому должен быть номер версии или что-то в этом роде. После этого версии модели ценообразования должны быть сохранены в базе данных.

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


person Michael W.    schedule 23.04.2010    source источник


Ответы (1)


Прежде всего, вам нужно знать все возможные переменные. Вы упоминаете number of times someone has used a service и group membership. Может быть больше работы, чем вы думаете, если набор переменных может измениться.

Далее следует уровень сложности правил, которые должны поддерживаться. Возможно, вам не понадобится полноценный механизм правил. С помощью простых вычислений выражений можно добиться очень многого, см. https://eval.dev.java.net. Например.

Если вы идете на оценку выражения, просто сохраните каждую версию модели ценообразования как отдельную строку в базе данных или что-то в этом роде. Вам могут понадобиться правила типа «укажи и щелкни», но часто письменный аналог намного понятнее.

person bitc    schedule 23.04.2010
comment
Самое главное — создать гибкую модель ценообразования для провайдера. Все переменные, которые приходят мне на ум. * Членство в группе. * Количество раз, когда кто-то пользовался услугой. * Количество времени, в течение которого пользователи используют сервис в месяц/год. * Пользователи с определенными свойствами (например, все пользователи из xTown). * время использования услуги (например, с 20:00 до 12:00). Достаточно, когда вы можете объединять правила с помощью логических операций И ​​и ИЛИ. Может быть, оценки выражения недостаточно. Или можно использовать объекты в выражениях и сохранять эти выражения? - person Michael W.; 24.04.2010
comment
«Eval» (на который я ссылался выше) поддерживает тернерный оператор «?», а также И, ИЛИ: (usedService › 5 && isMember = 1 ? скидка = 0,1 : скидка = 0,0). Выражения нужны другим способом, если вам нужна гибкая модель ценообразования. - person bitc; 25.04.2010
comment
Я должен подумать об этом ... может быть, простая оценка выражения лучше для сложности этого приложения. Однако механизмы правил, такие как Drools, являются интересным вариантом. - person Michael W.; 26.04.2010