3

我正在研究 Drools 规则引擎得到这个场景来将块中的值从 1000 更改为 2000,将符号从 > 更改为 <,我们可以使用表单来编辑值来实现这一点

rule "payment"

when 
   account:Paymentinfo(transaction < 1000)
then
4

1 回答 1

0

规则模板 第二种解决方案是使用规则模板(链接指向 Drools 文档。)基本思想是您提供一个数据表和一个 DRL 的模板,Drools 框架会将数据制作成模板并生成为您提供 DRL。当您有非常重复的规则(例如您的规则)时,这很有用——在其他规则中,您基本上是在应用具有各种不同约束的相同规则。

与其他场景类似,您的工作流程将如下所示:

用户在 UI/前端创建约束,指定所需信息(卡类型、最低价格、折扣)。用户的约束被发送到服务器。服务器将请求重新格式化为表格形式(而不是 JSON 或任何原始格式)。服务器使用带有模板的数据表(步骤 3)来生成规则。您的模板可能看起来像这样,假设列标记为“cardType”、“minPrice”和“discount”):

template header
cardType
minPrice
discount

package com.example.template;
import com.example.Order;

template "orderdiscounts"

rule "Apply order discount for @{cardType}"
when
  $order: Order( cardType == "@{cardType}",
                 price > @{minPrice} )
then
  $order.setDiscount(@{discount});
end

end template

格式非常简单。首先是标题,我们在其中按顺序定义列。第一个空行表示标题的结尾。接下来是包声明和导入,因为它们对于文件来说是静态的。然后是模板。列值使用@{ column name } 模式进行插值;请注意,您需要将其包含在字符串的引号中。

Drools 文档非常好,所以我不会过分详细介绍,但是您应该能够了解其中的要点。

于 2021-12-26T06:20:30.203 回答