文档修订历史

时间 版本 主要内容
2023.05.12 v1.0.0 初始化

1. 概述

1.1 需求

1.1.1 需求背景

   当同一个业务场景中,有非常多的业务分支后,需要有非常多的 if 判断,来承载这些简单的业务逻辑,但随着业务的发展,业务逐渐复杂,if 分支越来越多,可维护性越来越差,技术债务越来越重。
   if-else 的目的,不外乎以下若干场景:

  1. 异常逻辑处理
  2. 特殊case
  3. 不同业务流程处理
  4. … …

   但这些分支逻辑难以避免,我们需要考虑如何正视它。

1.1.2 需求目标

   业务规则往往是一个庞大且不断变化的规则组合,这使得系统非常复杂,如果只是使用常规代码,则会产生大量的维护工作。

   我们使用规则引擎,将庞大的规则组合,从业务代码中抽离出来维护到一个数据源中,实现 将业务流程与业务规则分离 的目标。

专题分析

规则引擎方案调研

方案 详情 优点 缺点
Drools 开源规则引擎,由Red Hat开发和维护。它提供了一个成熟的规则引擎和规则管理系统,支持规则的动态定义、评估和执行。 1. 功能丰富 2. 支持DB存储规则 1. 复杂度高,学习成本高
EasyRule 轻量级框架,基本上只提供了一个规则判断和行为执行的框架。通过一些注解实现抽象的方式去做规则。 学习成本低 1.不包含规则编排等功能 2. 不提供连接DB的能力,修改配置后不实时生效

Drools

Drools常用 API 使用介绍

EasyRule

EasyRule常用API
EasyRule-github-代码用例

EasyRule 使用介绍

   主要涉及的模型如下:

  • Rule:规则的生成

    • 多种方式来定义规则
  • Condition:执行条件的定义
  • Action: 条件满足后的行为
  • RuleEngine:执行决策的引擎

Rule的生成方式

  1. 注解方式
@Rule(name = "my rule1", description = "my rule description", priority = 1)
public class MyRule1 {@Conditionpublic boolean when(@Fact("type") Integer type) {return type == 1;}@Action(order = 1)public void execute1(Facts facts) throws Exception {log.info("MyRule1 execute1, facts={}", facts);}@Action(order = 2)public void execute2(Facts facts) throws Exception {log.info("MyRule1 execute2, facts={}", facts);}
}
  1. 流式API
Rule weatherRule = new RuleBuilder().name("weather rule").description("if it rains then take an umbrella").when(facts -> facts.get("rain").equals(true)).then(facts -> System.out.println("It rains, take an umbrella!")).build();
  1. 表达式方式
    支持 MVEL , SpEL and JEXL
Rule weatherRule = new MVELRule().name("weather rule").description("if it rains then take an umbrella").when("rain == true").then("System.out.println(\"It rains, take an umbrella!\");");
  1. 规则描述文件
---
name: adult rule
description: when age is greater than 18, then mark as adult
priority: 1
condition: "person.age > 18"
actions:- "person.setAdult(true);"
---
name: weather rule
description: when it rains, then take an umbrella
priority: 2
condition: "rain == true"
actions:- "System.out.println(\"It rains, take an umbrella!\");"

思考与方案改进

  1. 决策引擎是否可以将决策配置转移到 DB 中,每次配置调整后,可以实时生效?
  2. API中,是否可以按不同的业务,传入一个业务唯一id(如决策码),决策出一个boolean或决策出一个String内容,简化业务接入放的使用?

决策引擎平台建设方案相关推荐

  1. 186页13万字智慧能源大数据分析平台建设方案

    目录 智慧能源大数据分析平台及能源集团数字化平台建设方案 目录 一.相关项目背景 二.需求理解 2.1 需求理解 三.方案设计 3.1 整体方案设计 3.3.1 整体架构 3.3.2 解决方案说明 3 ...

  2. 300页13万字新型智慧城市云平台中心及大数据平台建设方案

    目    录 1. 智慧城市云计算中心总体设计 8 1.1 总体设计方案 8 1.1.1 设计原则 8 1.1.2 支撑平台技术架构设计 10 1.1.3 支撑平台网络拓扑设计 11 1.1.4 通过 ...

  3. 某市电子政务监控预警平台建设方案

    某市电子政务监控预警平台建设方案 1   方案概述 1.1  方案建设目标 某市电子政务网络由全市各个委办局单位网络接入组成,由于接入单位众多且各自单位信息安全建设水平参差不齐,经常造成内部网络病毒和 ...

  4. 数据决策分析平台建设方案,附51页解决方案PPT

    对国内企业来说,普遍都存在数据分散,利用率低,需求变化快但响应慢的痛点.近几年,随着数字化转型热潮的出现,企业开始逐渐明白数据的重要性,因此也上了OA.ERP.HR等系统,但每个业务系统中都存在分散的 ...

  5. 政务大数据数据智能平台建设方案(附下载)

    按照S市大数据中心对市区两级大数据资源平台建设统一标准规范的要求下,以实际需求为导向,搭建m区大数据资源平台,加快推进与承接S市大数据资源平台的落地数据资源,归集区内各单位公共数据资源,按需实现共享交 ...

  6. 龙岩市物联网应用平台建设方案

    龙岩市物联网应用平台建设方案 龙岩市物联网应用平台建设方案 总体技术要求 M2M 平台定位要求 1.提供统一的终端接入平台 2.提供统一的应用基础运行平台 3.提供统一的安全认证 4.提供统一的数据交 ...

  7. 智慧水务平台建设方案全流程管控方案 智慧水务信息化系统的意义_管理_数据_设备

    平升电子智慧水务平台建设方案全流程管控方案/智慧水务信息化系统/水务综合运营管理平台/智慧水务平台,综合水务公司对管网地理信息在线.供水调度SCADA.各环节数据互联互通.工单执行过程监督.运营情况分 ...

  8. 政府大数据中心数据资源平台建设方案2022(word)

    本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除 1.1 总体建设方案 1.1.1 中心总体定位 区级大数据资源平台建设的核心是汇聚全区各类公共数据,建立面向政务顾问.经济发展.城市管理 ...

  9. 政府大数据中心数据资源平台建设方案WORD2022

    本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除 1.1 项目建设内容 对于本次区级大数据资源平台的建设,将按照"总体规划一步到位,平台建设分步实施,数据赋能逐步升级" ...

最新文章

  1. 如何入门Python?你不知道的小窍门。
  2. C语言编程之格式化输出函数printf()说明
  3. python script 95% interval
  4. 网页小图标Favicon
  5. 三个实例演示 Java Thread Dump 日志分析
  6. [转]关于凸优化的一些简单概念
  7. Linux 笔记 :FHS目录笔记
  8. 自增字段不连续_MySQL中自增主键不连续之解决方案。(20131109)
  9. stm8s003f3使用杂记
  10. linux 中文乱码 解决方法
  11. co作为前缀的意思_智课雅思词汇---十五、前缀co-com-con-col-cor-是什么意思
  12. 基于Salt Event系统构建Master端returner
  13. Android显示raw格式,手机上怎么处理RAW格式?有何不同?
  14. 教你怎么快速读出python numpy中给定的array的shape
  15. xHiveAI Jetson NX盒子:jpeg图片编码
  16. tomcat宕机自动重启和每日定时启动tomcat【工具包系列】
  17. DTX-1800还需要校准吗?
  18. 解决windows 2000无法安装vmtool的问题
  19. CNN实现花卉图片分类识别
  20. 报表设计丨颜色搭配(附:多个模板)

热门文章

  1. Augustus安装问题 (3.0 以上都适用)
  2. 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现
  3. 基于matlab的磁悬浮控制系统,基于MATLAB的磁悬浮控制系统设计课件.ppt
  4. Joplin安装使用及结合teracloud同步
  5. flash 位图缓冲
  6. 嫁外地男孩犹如选择“绩优股”
  7. 我为什么离开神州泰岳
  8. rp软件app流程图_AxureRP介绍–架构图和流程图
  9. #游戏unity-VR场景漫游#关于VR以及项目基础
  10. 25 openEuler管理网络-使用nmcli命令配置ip