Эквивалент набора переменных ILOG в Drools

Я пытаюсь перенести существующее приложение на основе ILOG JRules в проект на основе Drools. В ILOG у нас есть локальные переменные (и набор переменных), которые можно использовать для вычисления и хранения промежуточных значений в правилах (формулах).

Есть ли эквивалент локальных переменных в Drools? Я знаю, что у нас есть глобальные в Drools, но в документации предлагается использовать Globals только как константы только для чтения и передавать данные между вызывающим классом Java в правила:

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

Один из подходов состоит в том, чтобы написать собственный класс Java Variable, объявить в нем все переменные и использовать его в правилах drools. Но для этого потребуется изменение кода Java каждый раз, когда мы хотим добавить новую переменную.

Есть ли какой-либо возможный метод определения и использования переменных в Drools, которые можно определять и изменять в рамках правил?


person Viral Patel    schedule 27.02.2013    source источник


Ответы (1)


Я не вижу ничего плохого в том, чтобы использовать глобальные переменные, чтобы сохранить какое-то вычисление или состояние между вашими правилами. Я думаю, что документация Drools пытается сказать (очень сложным и неясным образом), что вы никогда не должны использовать глобальные переменные в правой части правил, потому что Drools не знает, когда изменяется значение глобальной переменной. Если вы используете глобальные переменные в своих ограничениях, убедитесь, что вы никогда не меняете их значения. После этого я думаю, что использование глобалов в RHS ваших правил безвредно. Если вам не нравится эта идея, вы также можете вставить свой объект «Расчет» как факт в свою сессию. Правила могут сопоставляться с этим фактом, привязывать к нему переменную и затем взаимодействовать с ней в RHS.

Надеюсь, поможет,

person Esteban Aliverti    schedule 01.03.2013