希望使用easy rules api构建java动态规则引擎
我有许多规则需要根据数据库中的数据进行评估,我计划使用easyrules api。 我不喜欢在代码中编程或硬编码规则。 构建代码后,更改规则标准应该很容易。 请帮助我如何使其动态和可读性。 Easyrules api坚持每个规则都有一个单独的类,如下所示:我希望以下代码基于易于修改的规则输入动态构建: 我考虑了以下几点,但不确定哪一个是最好的: 1.DB table—具有规则条件的规则表。(我可以使用更新查询来更改规则) 2.JSON或XML 我在其他工具上也很灵活,不局限于easyrules。希望使用easy rules api构建java动态规则引擎,java,rule-engine,Java,Rule Engine,我有许多规则需要根据数据库中的数据进行评估,我计划使用easyrules api。 我不喜欢在代码中编程或硬编码规则。 构建代码后,更改规则标准应该很容易。 请帮助我如何使其动态和可读性。 Easyrules api坚持每个规则都有一个单独的类,如下所示:我希望以下代码基于易于修改的规则输入动态构建: 我考虑了以下几点,但不确定哪一个是最好的: 1.DB table—具有规则条件的规则表。(我可以使用更新查询来更改规则) 2.JSON或XML 我在其他工具上也很灵活,不局限于easyrules。
我想你可以参考这一页 它是带有@override的代码
public class DefenseFourthDownRule extends BasicFootballRule {
// return `true` if the rule should be applied, `false` else
@Override public boolean evaluate() {
if (gameState == null) return false;
if (gameState.down != 4) return false;
// we know it's 4th down ...
return true;
}
@Override public void execute() {
System.out.println("4th Down rule fired");
}
}
我可能会建议您使用java+GroovySrcit引擎。
您可以在GroovyScript中提供规则,并可以使用GroovyEngine动态执行它们。这只是一个想法。我知道我的答案晚了,但可能会引起其他人的兴趣 我用不同的方式使用easyrules引擎 我只使用一种规则,我可以用easyRule做非常复杂的事情 我的规则是硬编码的,我想可能会对存储在数据库中的规则执行类似的操作 在我的项目中,我需要根据一组复杂的条件从一步走到另一步。每个步骤的条件集都会发生变化。 我的规则引擎将根据当前情况构建一个新的情况 我唯一的规则是,juste持有一个测试对象和一个下一个对象 我有一个current情境对象,它保存了当前情境的所有参数。 它有
- test()方法只克隆对象(并将ruleEvaluates标志重置为true)李>
- 一个next()方法,它只克隆对象(并重置一些参数)
- 一组“is”方法返回对象本身,但如果条件不匹配,则将ruleEvaluate更改为false李>
- 一组“do”方法,在更改相关值后返回对象本身李>
我非常感谢马哈茂德·本·哈辛(Mahmoud Ben Hassine)提供了如此简单的规则引擎 这是一个老问题,但到2017年底,Easy Rules可以通过外部文件拥有动态规则 从他们的:
您是否考虑使用JBaseDROLL?有没有使用EasyRe规本身来做这件事的方法?这应该是一个注释。
public class DefenseFourthDownRule extends BasicFootballRule {
// return `true` if the rule should be applied, `false` else
@Override public boolean evaluate() {
if (gameState == null) return false;
if (gameState.down != 4) return false;
// we know it's 4th down ...
return true;
}
@Override public void execute() {
System.out.println("4th Down rule fired");
}
}
Situation currentSituation = getSituation();
int priority=0;
Rule rule1 = new Rule(
"MONDAY_RULE",
priority++,
currentSituation.test().isMonday().isRaining(),
currentSituation.next().docallMyBoss("won't work today").doGoBackToBed());
....
Rule rule7 = newRule(
"FRIDAY_RULE",
priority++,
currentSituation.test().isFriday().isSunny(),
currentSituation.next().doBuy("bathing Suit").doPlanWeekendBreak());
register(rule1);
register(rule2);
name: "alcohol rule"
description: "children are not allowed to buy alcohol"
priority: 2 condition: "person.isAdult() == false"
actions: - "System.out.println(\"Shop: Sorry, you are not allowed to buy alcohol\");"