Java常用的规则引擎,让你变动的代码更加容易维护

Java常用的规则引擎,让你变动的代码更加容易维护

在本文中,我们将介绍Java中一些最受欢迎的规则引擎。

规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。接受数据输入,解释业务规则,并根据业务规则做出业务决策。在Java中,大多数流行的规则引擎都实现JSR94

将规则引擎想象成一个以数据和规则作为输入的系统。它将这些规则应用于数据,并根据规则定义为我们提供输出。让我们以一个在线购物为例,我们希望为客户提供某些促销或折扣。

如果购物车总额超过$ 400,可为客户提供20%的折扣。

第一次下单给10%。

上面将购物车和客户定义为满足规则集中定义的条件的规则将在其中执行的数据。

简化系统架构,优化应用

提高系统的可维护性

减少编写“硬代码”业务规则的成本和风险

应付特殊状况,即客户一开始没有提到要将业务逻辑考虑在内

过将规则引擎分开,它提供了更大的可重用性。

流程分支非常复杂,规则变量庞大

有不确定性的需求,变更频率较高

需要快速做出响应和决策

规则变更期望脱离于开发人员,脱离coding

Java 中常用的开源规则引擎有哪些呢?

Drools是业务规则管理系统(BRMS)解决方案。它提供了核心业务规则引擎(BRE),Web UI和规则管理应用程序(Drools Workbench),对符合性级别3的决策模型和注释(DMN)模型的完整运行时支持,以及用于核心开发的Eclipse IDE插件及Idea插件。

Drools 是一个基于Charles Forgy’s的RETE算法的,易于访问企业策略、易于调整以及易于管理的开源业务规则引擎,符合业内标准,速度快、效率高。 业务分析师人员或审核人员可以利用它轻松查看业务规则,从而检验是否已编码的规则执行了所需的业务规则。

Drools是开源软件,根据Apache Software License发布。它用100%纯Java?编写,可以在任何JVM上运行,并且在Maven Central存储库中也可用。

Drools 是业务逻辑集成平台,被分为5个项目:

Drools Workbench (web UI )

Drools Expert (business rules engine)

Drools Fusion (complex event processing features)

jBPM (process/workflow integration for rule orchestration/flow)

OptaPlanner (automated planning)

Drools相关概念:

事实(Fact):对象之间及对象属性之间的关系

规则(rule):是由条件和结论构成的推理语句,一般表示为if…Then。一个规则的if部分称为LHS,then部分称为RHS。

模式(module):就是指IF语句的条件。这里IF条件可能是有几个更小的条件组成的大条件。模式就是指的不能在继续分割下去的最小的原子条件。

EasyRule是轻量级的规则引擎API。它提供Rule抽象来创建带有条件和动作的规则,以及RulesEngine通过一组规则运行以测试条件和执行动作的API。

以下是EasyRule的一些核心特点:

轻量级规则引擎API。

基于注释和POJO。

支持复合规则构造。

支持表达语言(如MVEL和SpEL)来定义规则。

简单了解下easyRule

核心概念

Rule : 包含规则执行的条件与动作,描述,优先级别。属于最基本配置。

Facts:输入对象。

RulesEngine:规则引擎执行核心。

简单了解下使用例子

添加Maven 依赖

简易规则提供以下创建规则的选项

以声明方式使用注释。

务实地使用流利的API。

使用表达语言

使用规则描述符。

让我们看几个例子:

声明式注解

或者使用函数方式

表达式方式

文件描述

执行规则

RuleBook提供了灵活的简单直观的DSL。如果您有更多规则集,我们可以将其构建为带注释的POJO,并且RuleBook可以将整个包立即转换为RuleBook。它提供了一个易于使用的启用Lambda的领域特定语言或使用POJO,让我们使用RuleBook来查看一个简单的规则定义:

Maven依赖

要将RuleBook添加到项目中,请在pom.xml文件中添加以下依赖项:

让我们看一个例子:

Hello World

使用Facts

执行规则

OpenL Tablets业务规则引擎(BRE)和业务规则管理系统(BRMS)。它包含以下主要组件:

Business Rules Engines(业务规则引擎)

WebStudio

Web services(web服务)

Rule repository(基于JCR的实现的规则库)

核心概念

Rules:规则是由条件,操作和返回值组成的逻辑语句

Tables:列出了OpenL Tablets处理的基本信息,例如规则和数据

Projects: 是处理规则相关信息所需的所有资源的容器。通常,一个简单的项目仅包含带有规则的Excel文件。

maven依赖

使用

在本文中,我们讨论了Java中流行的规则引擎。这些规则引擎为业务逻辑抽象提供了灵活性。在所有这些规则引擎中,Drools是最先进,最活跃的规则引擎,也正因如此,环境也是相对复杂。

EasyRule更加简洁,我们现在就是使用的这个解决方案。

根据自身的业务需要,选择更加符合的业务引擎方案。

文章整理不易,请关注下

微信公共号:

头条号:

Java常用的规则引擎,让你变动的代码更加容易维护相关教程

Java代码的维护与更新,Java常用的规则引擎,让你变动的代码更加容易维护相关推荐

  1. java开源的规则引擎_Java常用的规则引擎

    概述 在本文中,我们将介绍Java中一些最受欢迎的规则引擎. 规则引擎简介 规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编 ...

  2. Java物流项目第三天 订单服务中心和规则引擎

    品达物流TMS项目 第4章 订单中心服务开发(pd-oms) 1. 订单中心服务数据模型 本章要开发的是订单中心微服务,对应的maven工程为pd-oms.订单中心微服务提供TMS中订单的维护功能. ...

  3. java 规则引擎_【java规则引擎】java规则引擎搭建开发环境(示例代码)

    Drools and jBPM consist out of several projects:(Drools软件包提供的几个部分的功能) ------------------------------ ...

  4. python和java学哪个好-Python和Java该学哪个?还在纠结的你看过来呀~

    Java还是Python这确实是个难题. 如果问Java程序员一定会告诉你先学Java,如果问Python程序员一定会告诉你先学Python. 早在2017年Python就以荣登编程语言首位,如今它已 ...

  5. java account函数的_用Java进行同时函数调用 - java

    在我的应用程序中,我以以下方式加载缓存. 加载用户缓存loadUserCache(); 加载帐户缓存loadAccountCache(); 加载客户缓存loadCustomerCache(); 上述每 ...

  6. java update needed_为什么会显示 Java Update Needed(需要 Java Update)消息:Your Java version is out of date(...

    1320  Java 为什么会显示 "Java Update Needed"(需要 Java Update)消息:"Your Java version is out of ...

  7. java 实现规则引擎_Java规则引擎 Easy Rules

    1.  Easy Rules 概述 Easy Rules是一个Java规则引擎,灵感来自一篇名为<Should I use a Rules Engine?>的文章 规则引擎就是提供一种可选 ...

  8. [转载] 常用应届生Java开发笔试面试题(更新中)

    参考链接: Java中的循环的重要事项 Java开发面试题 Java基础篇Java8大基本数据类型Java的三大特性面向对象如果让你推销一款Java产品,你会怎么推销呢?(java的特点)JVM与字节 ...

  9. Java函数编码_转[收集java的常用函数代码]

    转[收集java的常用函数代码] package net.java2000.tools; /** * Title:        Java Bean 工具 * Description: * Copyr ...

最新文章

  1. Amazon SageMaker和NVIDIA NGC加速AI和ML工作流
  2. .NET中,字符串首字母大写的方法
  3. jenkins如何实现重新发布历史构建记录里的版本
  4. Python基础教程:上下文管理器 context manager(with...as...)
  5. 【maven】Missing artifact javax.jms:jms:jar:1.1:compile
  6. 唯品会php接口,唯品会链接生成联盟链接 - 唯品会API免费API接口-唯品会API开放API接口-云商数据(www.ecapi.cn)...
  7. 围观神龙架构首次开箱,现场直播暴力拆机
  8. java后台传一个对象到前台_前台判断对象中的一个布尔值_前后台分离的项目中,如何优雅的传输boolean类型的参数...
  9. Rman 非catalog恢复
  10. su root无法切换到root用户
  11. 22.docker wait
  12. resize view from nib引起的子控制器视图(childviewcontroller)部分区域无响应
  13. 【数据库--db4o 介绍】
  14. C# 判断字符串中文汉字
  15. 计算机毕业论文选题 - 毕设选题推荐
  16. Python 八大数据类型。
  17. mysql姓名三位随机_Mysql之生成随机数,随机字符串,随机姓名
  18. centos上搭建nginx视频点播服务器(nginx+vod+lua http发送鉴权消息)
  19. 关于c++中的一个母牛生小牛的问题详细解答与体会
  20. php date函数 在哪里,PHP date函数

热门文章

  1. php 格式化 sub,PHP DateTime sub()用法及代码示例
  2. 只用redis不用mysql的项目_干货!带你了解为什么那么多开源项目都是用Redis!
  3. suse linux下交叉编译,阐述SUSE 10.1交叉编译环境构建方法
  4. 频率响应函数与数字滤波实验_WKD3419振动测试与控制教学实验系统
  5. 绘制五彩泡泡python_五彩泡泡教案
  6. 华为被超越!这家公司成中国最大智能手机制造商,不是小米!
  7. 清华等高校自评称“已建成世界一流大学”?教育部回应
  8. 嵌入式必会!C语言最常用的贪心算法就这么被攻略了
  9. verilog驱动ADC0809包括仿真测试
  10. linux下能用qt5.0,qt5.0移植