【问题标题】:Can a rules file have a dependency on other rules?规则文件可以依赖于其他规则吗?
【发布时间】:2022-01-18 23:38:33
【问题描述】:

我正在为我的新服务使用 drools 规则引擎。我正在考虑清理规则/使其更易于编写。我希望使用规则框架风格的编码。 IE。我想要一个规则文件,其唯一目的是验证输入数据(即输入列表不为空并且包含特定值)。然后,当我编写新规则文件时,我可以说导入此文件并在所有其他规则之前运行验证。

另外,我知道我可以将多个规则文件加载到 KieSession 中。是否可以告诉它运行规则文件的顺序,或者每个用例要跳过哪些文件?这背后的想法是为了性能。假设我使用规则服务加载了一个 AWS lambda 函数,我希望已经加载了所有规则并让它针对用例运行特定的规则,而不是为每个调用加载一个规则文件。

感谢您的帮助。

【问题讨论】:

标签: java drools rule-engine


【解决方案1】:

你问

是否可以告诉它运行规则文件的顺序,或者每个用例跳过哪些文件?

答案是肯定的。执行此操作的方法称为salience。链接的文章是了解这一点的好来源。这很重要,因为显着性可以改变规则的执行顺序。

假设您有一个基于类别处理交易的程序。因此,如果 category == deposit,您希望添加到当前余额。您还有另一条规则,如果 category == 提款 您想从当前余额中减去。但是,您想处理提款的存款。使用显着性,您可以保证存款规则将在提款规则之前触发,无论交易顺序如何。

依赖关系有点相关,但不一样。在 drools 中,这被称为Forward or Backward Chaining,具体取决于订单。这一切都是基于一系列事实构成的。例如,如果我要问一个系统“我的房子在地球上吗?”如果存在以下事实,则得出结论:

  1. 我的房子在沃思堡
  2. 沃思堡是德克萨斯州的一个城市
  3. 德克萨斯州是美国的一个州
  4. 美国是地球上的一个国家

根据验证上面列举的事实的规则,断言了将房屋位置与该星球联系起来的直接事实。这是使用链接完成的。向前或向后就是这些处理方式(自上而下或自下而上)。这是我记忆中最好的概括。

【讨论】:

  • 感谢您提供有关此信息。文件之间的显着性是否有效?
  • @user3509528 我不是 100% 确定,但我认为确实如此。一旦所有这些规则都加载到系统中,它们将通过链接和/或显着性来解决。我不明白它会如何或为什么会被忽略。
猜你喜欢
  • 1970-01-01
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-03
  • 2018-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多