我是规则引擎的新手,所以如果这个问题非常基本,请耐心等待。规则引擎的所有教程都在说,您可以将业务逻辑移出代码并由 BA/最终用户更新,而不是将其放在 Java 代码中。
我有以下问题
但是为什么我们不能编写代码来从属性文件中读取值并做同样的事情呢?
此外,与 .properties 文件相比,规则文件的语法似乎不仅仅是单行的。
将这些规则放入规则引擎是否可以使代码/应用程序工作而无需重新启动应用程序服务器?
3a。如果没有,那么我们如何实现它?
我是规则引擎的新手,所以如果这个问题非常基本,请耐心等待。规则引擎的所有教程都在说,您可以将业务逻辑移出代码并由 BA/最终用户更新,而不是将其放在 Java 代码中。
我有以下问题
但是为什么我们不能编写代码来从属性文件中读取值并做同样的事情呢?
此外,与 .properties 文件相比,规则文件的语法似乎不仅仅是单行的。
将这些规则放入规则引擎是否可以使代码/应用程序工作而无需重新启动应用程序服务器?
3a。如果没有,那么我们如何实现它?
最近几天一直在做一些阅读,我认为(恕我直言),允许使用简单的电子表格更新业务规则的能力,使规则引擎比属性文件更具优势。我可以使用多个属性和将规则修改为每个属性下的注释的说明,使属性文件尽可能高度可配置。
但在业务用户能够直接配置应用程序以根据电子表格中的“决策表”应用值的情况下,该解决方案将更可取。
如果任何其他(初出茅庐的)开发人员正在寻找规则引擎需要的理由,对此答案深信不疑,请竖起大拇指!
最后,我想说我们使用 Redhat BRMS 的主要原因是,正如他们在文档中提到的那样:
规则引擎只是组织许多规则的算法。请参阅Rete 算法。
基本上,这一切都归结为复杂性。如果您有一些简单的规则,当然可以使用 .properties 文件。但是想象一下,如果你的一些规则是“链式的”——一个规则会影响其他一些属性,这会触发一些其他规则,从而改变另一个属性……你必须扫描每一个规则,每一个变化。对于成千上万的规则,这将需要永远。因此是“规则引擎”。
关于为什么应该或不应该使用规则引擎的文章有很多。这是一个很好的例子。 https://martinfowler.com/bliki/RulesEngine.html
规则引擎并不总是答案。但是,它们在理论上提供了引擎可以对简单的规则表达式执行复杂处理并返回结果的优势。其他优点是对规则的可见性和更少的代码。
回答您的问题。
你可以。在简单的情况下,使用属性文件是有意义的。
规则需要足够复杂以涵盖他们验证的业务问题。一个好的规则引擎使用可读的语法,即使它很复杂。
理论上,规则服务器可以独立于应用服务器运行。在大公司,这很正常。规则服务器可以在不重新启动的情况下允许更新,或者可以在不影响应用服务器的情况下重新启动(波纹,如果有多个实例)。