node-rules 是一个轻量级的正向链接规则引擎。
1.如果已经安装好 nodejs 之后,输入以下命令。
ohpm install node-rules@7.2.0
对于OpenHarmony ohpm环境配置的详细信息,请参阅OpenHarmony环境配置指南。
2.在需要使用的页面导入 node-rules。
import RuleEngine from "node-rules"
1.定义规则 规则将有条件及其相应的结果组成。
class Rule {
condition(R: ESObject) {
R.when((this as ESObject).transactionTotal < 500);
}
consequence(R: ESObject) {
(this as ESObject).result = false;
(this as ESObject).reason = "The transaction was blocked as it was less than 500";
R.stop();
}
}
let rule = new Rule()
这里的优先级是一个可选参数,当有多个规则运行时,它将用于指定一个规则相对于其他规则的优先级。在上面的规则中,R.when 计算条件表达式并 R.stop 用于停止对事实的进一步处理,因为我们已经得到了一个结果。
函数 R.stop R.when R.next R.restart 是流量控制 API 的一部分,允许用户控制引擎流量。
2.定义一个事实 事实是规则引擎应用其规则以获得结果的那些输入 json 值。根据您的决定,一个事实可以具有多个属性。
let fact: ESObject = {
name: "user4",
application: "MOB2",
transactionTotal: Number.parseInt(this.setValue),
cardType: "Credit Card"
}
3.使用规则引擎 下面的示例显示了如何使用规则引擎将示例规则应用于特定事实。规则可以作为规则数组或单个规则对象输入到规则引擎当中。
let ruleEngine = new RuleEngine();
class Rule {
condition(ruleEngine: ESObject) {
ruleEngine.when((this as ESObject).transactionTotal < 500);
}
consequence(ruleEngine: ESObject) {
(this as ESObject).result = false;
(this as ESObject).reason = "The transaction was blocked as it was less than 500";
ruleEngine.stop();
}
}
let rule = new Rule()
ruleEngine.register(rule);
let fact: ESObject = {
name: "user4",
application: "MOB2",
transactionTotal: Number.parseInt(this.setValue),
cardType: "Credit Card"
}
console.log("------" + this.setValue);
ruleEngine.execute(fact, (data: ESObject) => {
if (data.result) {
console.log("Valid transaction:" + data.result); //满足规则
this.resultStr = "Valid transaction:" + data.result;
} else {
console.log("Blocked Reason:" + data["reason"]); //不满足规则
this.resultStr = "Blocked Reason:" + data["reason"];
}
})
4.控制在规则引擎上运行的规则 如果您正在寻找方法来指定将规则应用于事实的顺序,则可以通过使用 priority 参数来完成。
"priority": 4
注册规则。
此函数用于传递我们要评估的条件表达式。在上面的表达式中,我们通过表达式来检查上下文中事实的 transactionTotal 属性是否低于 500.如果传递给的表达式 R.when 计算结果为真,则条件将执行。否则,规则引擎将移至下一条规则,或者如果没有规则可应用,则可能终止。
该函数在结果函数中使用,以指示规则引擎停止处理事实。如果调用此函数,及时留下要应用的规则,规则引擎也不会对事实应用其余规则。它主要用于当我们对特定事实得出结论并且不需要对其进行任何进一步处理来生成结果时。
如上例所示,当事务小于 500 时,我们不在需要处理规则。因此将 false 存储在 result 属性中并在结果内立即调用 stop。
该函数在后果函数中使用。者用于指示规则引擎开始对事实应用下一个规则(如果有)。
该函数用于结果函数内部,以指示规则引擎从头开始对事实应用规则。当事实对象被结果函数修改并且需要再次遍历所有的规则时,规则引擎也会在内部使用此函数。在初始化新规则引擎时使用该 ignoreFactChanges:true 选项将关闭此功能。
执行并验证事实。
在下述版本验证通过:适配DevEco Studio:4.1 Canary(4.1.3.317),OpenHarmony SDK:API version 11 (4.1.0.36).
使用过程中发现任何问题都可以提交 Issue 给我们,当然,我们也非常欢迎你给我们提交 PR 。
本项目遵循 Apache License 2.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。