规则文件可以依赖于其他规则吗?

Can a rules file have a dependency on other rules?

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

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

感谢您的帮助。

你问了

Is it possible to tell it which order to run the rules files in, or which files to skip for each use case?

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

假设,假设您有一个根据类别处理交易的程序。因此,如果 category == deposit,您想增加当前余额。你有另一个规则,如果 category == withdrawal 你想从当前余额中减去。但是,您想处理存款而不是取款。使用 salience 你可以保证无论交易顺序如何,存款规则都会在取款规则之前触发。

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

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

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

是的,可以通过使用显着性并为某些规则分配优先级,以便它们在其他规则之前执行。此外,我们可以利用推理引擎创建事实,使其他规则符合执行条件。