作者:孤独烟来源:https://www.cnblogs.com/rjzheng/p/10996186.html

一天,朱斯参加了一场code Review研讨会。会上的一群人正在讨论着如何对祖传代码进行变更,大家你一言,我一语,场面十分热闹!

突然,只见人群中的一个人满面愁容,说道:"昨天在项目中看到下面这样一段代码,分支太多了!维护起来很烦啊!"

研讨会上的另一个人提道:"这个容易啊,可以用策略模式来简化if else的结构!毕竟策略模式强调的就是数据与业务逻辑分离,针对每一个分支写一个策略就好啦!"

可是,旁边的一个人说道:"用策略模式来简化if else的代码结构固然可以,但是这里有一个前提,就是分支比较少,一般就十来个分支差不多了,可以用策略模式来简化!但是如果我有上万个分支呢?你难道做上万个策略?就算这几万个策略真给你写出来了,你以后怎么维护?以后要修改策略,改完再重新部署一次么?太不灵活了啊!"

此时,刚好有一位DBA大神也参加了这场code Review研讨会!他说道:"要不考虑一下存储过程?将变化的策略放在存储过程里维护,这样至少修改了策略,不用部署原来的应用!"

听到这里,朱斯实在听不下去了,猛的回了一句:"不行!不行!用存储过程可读性更差,而且性能还不好!更可怕的是,如果你用的是MySQL,调试存储过程是会要人命的!"

"唉,这也不行,那也不行,究竟该怎么办?"人群中充斥着吵闹声!

朱斯摆了摆手,示意大家静静,说道:"我们需要明白现在的需求是什么?

  • 第一,我们要简化if else结构,让业务逻辑和数据分离!
  • 第二,分离出的业务逻辑必须要易于编写,至少单独编写这些业务逻辑,要比写代码快!
  • 第三,分离出的业务逻辑必须要比原来的代码更容易读懂!
  • 第四,分离出的业务逻辑必须比原来的易于维护,至少改动这些逻辑,应用程序不用重启!
  • 大概,就上面四点吧!"

大家问道"有满足这样需求的中间件么?"

朱斯说道:"有的!那就是规则引擎!在一些强大的规则引擎中,可以像下面这样优化,使数据和逻辑分离!"

朱斯补充道:"像上面这张图这样,我们将业务逻辑抽取到单独的规则文件里进行维护,实现了业务和数据分离!至于数据如何传入规则引擎呢,注意看代码里有一句叫kieSession.insert("星期一"),这样规则引擎就知道自己有一个字符串内容为星期一的入参!而且,大家注意看哦,规则文件内容是可以用中文编写的!"

"哇塞、还能用中文来表述业务逻辑!这样非技术人员也能看得懂呀!"人群中传来一阵惊叹声!

(ps:笔者的同事,当年第一次见到我写的中文业务逻辑,他一脸的神奇!~)

朱斯补充道:"不仅如此,当你新加一个条件分支的时候,直接新增一个规则文件就好啦!例如,我们要多加一个判断周二要去shopping!那我们就在规则包中新增一个文件,内容如下!"

"大家看,我们在规则包中新增上述规则文件后,你只要让你的应用程序从新加载一次规则包就好啦!完全不用重启原来的应用程序!"朱斯说完话,面带笑容的看着大家。

众人看着朱斯的讲解,纷纷称奇!

突然,人群中一阵沸腾,问道"哇哇哇,真是太神奇了,快告诉我们这套规则引擎叫啥!"

"我叫朱斯(Drools),刚才展示的那套规则语言是我的领域特殊语言(DSL)!"

规则引擎 drools_为什么要用规则引擎?相关推荐

  1. 规则引擎 drools_网易考拉规则引擎平台架构设计与实践

    背景 考拉安全部技术这块目前主要负责两块业务:一个是内审,主要是通过敏感日志管理平台搜集考拉所有后台系统的操作日志,数据导入到es后,结合storm进行实时计算,主要有行为查询.数据监控.事件追溯.风 ...

  2. java 规则引擎_GitHub - javaso/rulegin: 分布式规则引擎系统,重构于开源IOT项目thingboard...

    一.背景 规则引擎是一种根据规则中包含的指定条件,判断其能否匹配运行时刻的实时条件来执行规则中所规定的动作, 用户可通过规则引擎设定消息处理规则, 对指定的消息采取相应的措施来对设备进行监控和处理,如 ...

  3. drools规则引擎技术指南_物联网规则引擎技术

    物联网应用程序设计与典型的IT解决方案大不相同,因为它将物理操作技术(OT)与传感器.致动器和通信设备连接起来,并将数字信息技术(IT)与数据.分析和工作流连接起来. 在企业环境中,物联网非常复杂,这 ...

  4. mysql 规则引擎_为什么要用规则引擎?

    一天,朱斯参加了一场code Review研讨会.会上的一群人正在讨论着如何对祖传代码进行变更,大家你一言,我一语,场面十分热闹! 突然,只见人群中的一个人满面愁容,说道:"昨天在项目中看到 ...

  5. Thingsboard规则引擎详解,TB规则引擎如何使用

    一.规则引擎是什么? 官方解释:"规则引擎由推理引擎发展而来,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策.接受数据输入,解释业 ...

  6. drools规则语言指南(五)规则条件和行为

    DRL中的规则条件(WHEN,LHS) 规则结构 规则中的条件 DRL中的when部分就是规则的条件(通常又叫做规则的左手边,即:Left Hand Side(LHS)) 只有满足了所有的条件,才回去 ...

  7. MySQL存储引擎 lnnoDB逻辑架构 innodb存储引擎表空间(ibd文件)详解 回滚日志的物理空间

    文章目录 存储引擎 一 MySQL组织架构 二 查看存储引擎信息 三 修改存储引擎 3.1 配置文件修改存储引擎 3.2 临时修改存储引擎 3.3 建表时修改存储引擎 四 存储引擎实验 五 数据库升级 ...

  8. ThinkPHP6 模板引擎普通标签中,模板引擎运算符函数,循环标签,判断标签的使用,及一些特殊标签

    ThinkPHP6 模板引擎普通标签中,模板引擎运算符函数,循环标签,判断标签的使用,及一些特殊标签 模板引擎支持普通标签和XML标签方式两种标签定义,分别用于不同的目的: 标签类型 描述 普通标签 ...

  9. opengl游戏引擎源码_跨平台渲染引擎之路:拨云见日

    前言 最近在工作中越来越多地接触到一些3D以及相比常见特性更酷炫的效果,因此萌发了想要自己从0开始打造一个渲染引擎的念头,一方面是为了更好地实现公司业务的需求,另一方面则是可以学到整个渲染流水线上的方 ...

最新文章

  1. linux怎么创建牡蛎_文件amp;目录小技巧 | Linux后门系列
  2. 分布式架构:并发重复请求和幂等场景技术实现总结
  3. 视频驱动V4L2子系统驱动架构 - ioctl
  4. 3.TF-IDF算法介绍、应用、NLTK实现TF-IDF算法、Sklearn实现TF-IDF算法、算法的不足、算法改进
  5. iOS屏幕尺寸和分辨率了解
  6. CoreImage使用介绍
  7. package和import
  8. tsql 正则_sql里的正则表达式
  9. marathon 测试
  10. [leetcode] @python 113. Path Sum II
  11. 微信小程序 - 贝塞尔曲线(购物车效果)
  12. iOS中的坑:URL不识别##
  13. web player php,unity web player是什么软件
  14. Joiner.on和stream().map联合使用技巧
  15. kubesphere K8S Kubeedge 安装配置菜鸟级指导
  16. 戴尔G3游戏本蓝屏现象频繁解决方案(最新篇)
  17. 达芬奇17新功能及安装教程
  18. jsp+ssm计算机毕业设计演唱会售票系统【附源码】
  19. 华东师范大学计算机模拟试题,华东师范大学计算机机试真题
  20. 强化学习——双臂攀爬机构运动控制

热门文章

  1. 项目部署不到tomcat中的原因和解决方法
  2. 数据库安全性之使用命令来实现用户管理以及角色.十五
  3. 关于nginx反向代理产生大量连接问题解决。
  4. SQL Server查看错误日志存档编号及其详情
  5. FRM-40212: set_item_property:ITEM_IS_VALID
  6. 在Win7的IIS上搭建FTP服务及用户授权
  7. Android资源文件
  8. Android canvas.translate
  9. STP HSRP和NAT结合实现网络出口的冗余和次优路径分析
  10. 300英雄服务器维护多久,300英雄7月19日停机更新公告