Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drools 如何将某些DRL文件应用于某些事实_Drools_Rule Engine_Kie - Fatal编程技术网

Drools 如何将某些DRL文件应用于某些事实

Drools 如何将某些DRL文件应用于某些事实,drools,rule-engine,kie,Drools,Rule Engine,Kie,让我们假设我在一家大型制造公司工作。我正在监控公司销售数据的质量。各区域经理对各自区域的销售都有自己的要求。8位区域经理中的每一位都向我提供了一份DRL文件,该文件仅适用于其所在区域的销售,他们将对DRL进行频繁调整 假设我正在处理一个Sale对象,每个对象都包含一个region属性。我不能对来自错误地区的销售应用规则。如果我不小心把太平洋西北部的规则应用到俄亥俄河谷的销售中,那么我将被解雇 我可以想出三种方法: 信任(并验证)每位区域经理在每次提交新规则时,在其规则的LHS中包含一个区域“…”

让我们假设我在一家大型制造公司工作。我正在监控公司销售数据的质量。各区域经理对各自区域的销售都有自己的要求。8位区域经理中的每一位都向我提供了一份DRL文件,该文件仅适用于其所在区域的销售,他们将对DRL进行频繁调整

假设我正在处理一个Sale对象,每个对象都包含一个region属性。我不能对来自错误地区的销售应用规则。如果我不小心把太平洋西北部的规则应用到俄亥俄河谷的销售中,那么我将被解雇

我可以想出三种方法:

  • 信任(并验证)每位区域经理在每次提交新规则时,在其规则的LHS中包含一个区域“…”术语。将所有DRL文件加载到Kie会话中,并运行所有销售
  • 将我的列表划分为8个特定于区域的列表,并针对相应的DRL文件运行每个列表
  • 使销售抽象化并实施PacificNorthwestSale、OhioRiverValleySale等,理论上,给定区域的DRL文件可能不会试图引用其他区域的特定区域销售
  • 有更好的办法吗?是否有某种方法可以将另一个LHS条件(region=“…”)添加到DRL中的所有规则?或者我可以通过其他方式强制执行此策略,而无需执行以下操作:

    • 多规则执行
    • 或手动验证所有规则是否指定了适当的区域
    #1是不存在的,因为没有简单的方法来确定在所有规则中是否包含区域约束。(当然,这让你想知道:这些地区性的家伙是否足够好,能够在地区限制之外正确地编写规则?如何做到?其中一条规则会计算他们的奖金吗?)

    #2是安全可靠的。它需要一点额外的处理,但这是微不足道的

    #3使Java代码库变得不必要的复杂。本质上,在所有其他条件相同的情况下,与一个类的不同子类进行匹配只不过是#1的糖衣版本。唯一的优点是检查更容易,例如,您可以在每个DRL上运行一个简单的grep

    #如果在单个会话中运行all比#2所需的更方便,那么我会采用4。为此,以编程方式结合DRL文件,并添加一点“胶水”:

    要运行,请将应用程序驱动程序中的焦点设置为这八个议程组中的每一个,然后插入适当的事实,确保在完成一个区域后清除WM

    package what.ever;
    import this.and.that.*;
    
    agenda-group "PacificNorthwest"
    // DRL from Pacific-Northwest
    
    agenda-group "OhioRiverValley"
    // DRL from Ohio River Valley