Лучший способ заменить правила Drools

У меня есть система, в которой «динамическая логика» реализована как правила Drools с использованием механизма правил.

Для каждой клиентской реализации реализуется пользовательская логика расчета цен и налогов с использованием файлов drl для этой конкретной реализации.

rule 'abc'
when
    name = 'X'
then
    price= '12'
end

И условие одного правила зависит от того, что установлено в предыдущих правилах, так что в основном правила переходят.

Это действительно болезненно, так как правила drools не являются последовательным программированием и не являются дружественными для разработчиков. Там появляется много ошибок из-за неправильной интерпретации того, как оцениваются слюни.

Есть ли лучшая альтернатива «java/groovy», которая могла бы легко заменить ее?


person openSource    schedule 27.02.2013    source источник


Ответы (1)


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

Your questions seems to lean towards the prior, so I'll address that. Be very careful with this approach. The previous individuals who implemented this appear to have done this the proper way with respect to using the Rete algorithm, as it sounds like the firing of one rule can execute other rules, this is good business rules - they aren't sequential they are declarative. Remember that imperative software is written for engineers mostly, it doesn't map back to the real world 100% of the time :)

If you put want to move this into java/groovy you are moving into an imperative language, which could put you into an if/then/else hell. I would suggest the following:

  1. Изолируйте этот код от остальной части вашей кодовой базы — в будущем, когда бизнес изменит свои правила, вам придется много заниматься обслуживанием этого кода. Хороший дизайн интерфейса и инкапсуляция окупятся в будущем.
  2. Разработайте какой-либо тип DSL со своим бизнес-клиентом, чтобы, когда они говорят что-то вроде «Кредитная политика», вы точно знали, на что они ссылаются, и могли соответствующим образом изменить соответствующие правила.
  3. Модульный тест, модульный тест, модульный тест. Это относится и к вашей текущей конфигурации. Если вы сейчас находите баги, то почему не тестируете? Настройка junit для создания объекта, вызова механизма Drools и проверки ответа не займет много времени. Если вы добавите несколько циклов для тестирования диапазонов переменных, которые ожидают одинаковый ответ, вы сможете мгновенно пройти сотни тысяч тестов.

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

person JasonH    schedule 28.02.2013