前言
规则引擎是什么?在网上一查就可以知道,大多数流行的规则引擎都实现JSR94。规则引擎可以方便我们将业务逻辑和源代码进行分离,可以想象规则引擎就是一套if/else语句,处理各种逻辑小分支的具体业务。
JSR-94 是由JCP(Java Community Process)组织所制定的java规则引擎API的java请求规范。它主要定义了规则引擎在java运行时的一些API,指导各个java规则引擎的厂商能够基于这个API实现规则引擎。当前主流支持这个标准的开源java规则引擎有:Drools、OpenRules、JLisa、JRuleEngine。
前几年我用Drools处理过比较实际的业务,总体来说,Drools使用起来非常灵活,完全满足项目前期我们对规则引擎的期待,也顺利的完成了任务。但有一点不舒服的是,Drools的规则都写在drl文件里,与源代码是割裂的,不方便阅览实现流程。
为什么使用引擎
也不是所有的场景都需要使用引擎,毕竟业务流程一般都是固定的,不确定性比较少,所以还是要具体情况具体分析。首先看看规则引擎可以给我吗带来什么好处吧。
- 减少硬代码带来的隐性成本
- 简化系统架构
- 灵活应对特殊情况
如果一个系统中,流程分支过于复杂,也有一定的变更频率,且需要快速做出反应,那么这个时候就需要用到这个技术了。
比如下面这个流程:
几种规则引擎实现
Drools
Drools 是一个业务规则管理系统 (BRMS) 解决方案。它提供了一个核心业务规则引擎 (BRE)、一个 Web 创作和规则管理应用程序 (Drools Workbench)、对一致性级别 3 的决策模型和符号 (DMN)模型的完整运行时支持以及一个用于核心开发的 Eclipse IDE 插件。
Easy Rules
Easy Rules 是一个 Java 规则引擎,灵感来自Martin Fowler的一篇名为“我应该使用规则引擎吗? ”的文章,其中 Martin 说:
您可以自己构建一个简单的规则引擎。您只需要创建一堆具有条件和操作的对象,将它们存储在一个集合中,然后运行它们以评估条件并执行操作。
这正是 Easy Rules 所做的,它提供了Rule创建具有条件和操作的规则的抽象,以及RulesEngine贯穿一组规则以评估条件和执行操作的 API。
核心功能:
- 轻量级库和易于学习的 API
- 基于 POJO 的开发,带有注释编程模型
- 用于定义业务规则并使用 Java 轻松应用它们的有用抽象
- 从原始规则创建复合规则的能力
- 使用表达式语言(如 MVEL、SpEL 和 JEXL)定义规则的能力
RuleBook
RuleBook
RuleBook 规则是按照 Java 开发人员的想法构建的:Java 代码。它们以程序员期望的方式执行:按顺序执行。RuleBook 还允许您使用易于使用的启用 Lambda 的域特定语言或使用您定义的 POJO 来指定规则!
厌倦了充满 if/then/else 语句的类?需要一个很好的抽象,允许以一种将规则彼此分离的方式轻松指定规则?想以与编写其余代码 [用 Java] 相同的方式编写规则吗?RuleBook 可能就是您一直在等待的规则抽象!