如何覆盖Drools 6中的规则和决策表?

如何覆盖Drools 6中的规则和决策表?,drools,Drools,在一个场景中,我们有一套主规则。其中一条规则类似于以下规则: rule "Check Eligibility" when $response(type=="rest",age== 25) then $response.setSendLetter("Y"); $response.setUpdateStatus("eligible"); end 这些规则将提供给客户。我们希望我们的客户能够定制规则。若决定不定制,那个么规则应该适用于它们。定制可以在“何时”中添加附加条件,也

在一个场景中,我们有一套主规则。其中一条规则类似于以下规则:

rule "Check Eligibility"
when 
    $response(type=="rest",age== 25)
then 
   $response.setSendLetter("Y");
   $response.setUpdateStatus("eligible");
end
这些规则将提供给客户。我们希望我们的客户能够定制规则。若决定不定制,那个么规则应该适用于它们。定制可以在“何时”中添加附加条件,也可以覆盖现有条件,还可以添加或修改“何时”部分。他们还可以添加到规则的“then”部分

比如:

rule "Check Eligibility"
when 
   $response(type=="rest",age== 27, state="IL")
then 
   $response.setSendLetter("N");
   $response.setUpdateStatus("eligible");
   $response.setSendEmail("Y");
end
我们还有一些决策表需要类似的定制

根据规则,最初建议使用“extends”,但据我所知,“extends”的作用是“和”,它将检查父项和子项的条件,如果两者都是真的,它将执行“then”部分

我可以考虑的可能解决方案是为每个客户克隆主存储库,然后每当主存储库规则发生更改时,我们都会对客户存储库进行拉取。可能的问题可能是偶尔出现的合并冲突,这些冲突可能必须手动解决


克隆解决方案尚未被团队接受,因此想知道实现规则和决策表“覆盖”的可能解决方案是什么?

存在技术问题和管理问题

如果你的管理层决定让客户乱用规则,他们必须意识到后果。显然,客户不会被单独留下来处理他们的规则,但您的组织将继续对整个应用程序的完美功能负责。你不能免费这么做,客户的回旋余地越大,成本就越高

对于这一点,没有令人满意的技术解决方案。扩展不适合您描述的修改类型:必须替换规则

  • 您可以(如您所写)复制DRL文件(在CM系统中创建分支)并让客户编辑。这是一个干净的方法;您可以使用其他测试(另一个要分支的CM项目)测试客户的基线,并使用众所周知的CM技术进行部署
  • 另一种方法是让客户编写另一个包含需要更改的规则的DRL文件。但您不能将此DRL文件与原始文件一起编译;不允许复制规则。有一些变通方法,例如,替换已编译的KieBase包中的规则,或者禁用KieBase中的重写规则,但是它们有一个不好的含义,那就是需要使用非稳定的内部API
  • 您可以尝试定义允许客户使用的DRL语言的子集,并允许使用基于该子集的DSL(可能是XML或类似语言)编写和覆盖规则。然后,生成器可以检查数据并创建DRL文本。使用这种方法,重写是一个简单的特性,由生成器处理。但是还需要大量的开发工作

  • 至于在Excel文件中以电子表格形式编写的决策表,您无论如何都需要克隆。我想不出任何其他方法来修改这些规则集。

    谢谢@laune!非常感谢您的解释性回复。是的,#1是我想要的,考虑到我们必须在两个月后生活。我们还有决策表,无论如何都要复制。我们还计划推出定制UI,只公开用“特定领域语言”编写的规则,并允许他添加更多规则。正如你正确指出的那样,对于我们揭露的现有规则,我们必须小心。