还在写大量 if 来判断?试试用一个规则执行器来替代它

MintRules:一个非常简单的java规则引擎 什么是薄荷规则? Mint Rules 是一个简单的规则引擎,100% 受的超级简单库的启发。 Mint Rules 对于太简单的情况很有用,但不需要更复杂的解决方案(有吗?)。 与简单规则的区别? 中的规则通常是有状态的,这导致必须为每个线程创建一个新的规则引擎,这是为 EasyRules 的美观和简单性付出的代价。 工作记忆 MintRules 从 Drools 借用了会话的概念。 Session保存规则执行的当前状态。 会话中的值会自动注入条件和操作方法。 Session 可以注入到规则中,以允许规则添加事实。 这必须小心完成,因为它会在规则之间创建时间依赖性。 在这种方法中使用优先级非常重要。 Session 的另一个用途是设置在规则引擎完成运行后检索的值 返回值 操作方法可以返回一个值以允许规则没有副作用。 所有操作方法必须返回相同的类型(或其子类)。 去做 确保错误信息非 立即下载

近日在公司领到一个小需求,需要对之前已有的试用用户申请规则进行拓展。我们的场景大概如下所示:

还在写大量 if 来判断?试试用一个规则执行器来替代它

按照上述的条件我们可以得出的结论是:

  • 咱们的主要流程主要是基于 and 或者 or 的关系。
  • 如果有一个不匹配的话,其实咱们后续的流程是不用执行的,就是需要具备一个短路的功能。
  • 对于目前的现状来说,我如果在原有的基础上来改,只要稍微注意一下解决需求不是很大的问题,但是说后面可维护性非常差。

后面经过权衡过后,我还是决定将这个部分进行重构一下。

规则执行器

针对这个需求,我首先梳理了一下咱们规则执行器大概的设计, 然后我设计了一个 V1 版本和大家一起分享一下,如果大家也有这样的case 可以给我分享留言,下面部分主要是设计和实现的流程和 code.

规则执行器的设计

还在写大量 if 来判断?试试用一个规则执行器来替代它

对于规则的抽象并实现规则

还在写大量 if 来判断?试试用一个规则执行器来替代它

执行器构建

还在写大量 if 来判断?试试用一个规则执行器来替代它

执行器的调用

还在写大量 if 来判断?试试用一个规则执行器来替代它

总结

规则执行器的优点和缺点

优点:

  • 比较简单,每个规则可以独立,将规则,数据,执行器拆分出来,调用方比较规整;
  • 我在 Rule 模板类中定义 convert 方法做参数的转换这样可以能够,为特定 rule 需要的场景数据提供拓展。

缺点:

  • 上下 rule 有数据依赖性,如果直接修改公共传输对象 dto这样设计不是很合理,建议提前构建数据。

 

关注我,每日更新技术好文

 

more-executors:性能更高的Java执行器 执行者更多 性能更高的Java执行器。 特别调整jucThreadPoolExecutor 。 使六个经常读取的易失性字段最终 减少挥发性(例如读取ø ctl.get()中addWorker ) 除去挥发性读取和写入的completedTasks (和相关联的未使用的方法) 基准结果 在Ubuntu 16.04 AWS t2.xlarge上,单个线程的吞吐量提高了10%: Benchmark Mode Cnt Score Error Units Benchmarks . executorDoNothingManyTimesSingleThreadJuc thrpt 10 308.426 ± 2.141 ops / s Benchmarks . executorDoN 立即下载

相关推荐

电力系统实时仿真技术:从硬件在环到主流平台实践

实时仿真是一种基于高性能计算硬件,在严格时间约束下模拟物理系统动态行为的关键技术。其核心原理在于通过硬实时计算,确保仿真步长内的模型求解与输出时间严格同步,从而构建高保真的虚拟测试环境。这项技术的核心价值在于为电力电子、新能源并网等复杂系统的研发提供了无风险的“数字沙盘”,能够安全地验证控制器逻辑、保护装置动作及系统稳定性。在工程实践中,硬件在环测试通过连接虚拟模型与真实硬件,形成了控制器硬件在环和功率硬件在环两大主流应用场景,广泛应用于设备研发、电网安全分析和人员培训。本文聚焦于电力系统领域,深入解析了实

weixin_30952479的博客 421

使用规则执行器替换java中if语句

使用规则执行器替换java中if语句干掉 if else,让代码容易扩展1.首先2.用户基类3.规则校验基类4.用户信息校验规则基类5.用户校验规则实现类,这里我写了两个,分别校验(UserInfo.addr是否以北京开头)和(UserInfo.age>=18)6.最重要的规则实现类7.测试 干掉 if else,让代码容易扩展 在公众号(链接:https://mp.weixin.qq.com/s/33S0KgZuGjddwY9gyAa1Iw)中看到这样一个规则执行器用来替换掉大量的if语句,本想在本

weixin_40187536的博客 1107

别再被SpringerLink虐了!手把手教你搞定LaTeX源文件提交(附正确文件顺序和类型选择)

本文详细解析了SpringerLink投稿系统中LaTeX源文件提交的常见问题与解决方案,包括文件打包、类型选择和顺序排列等关键步骤。通过实战经验,帮助科研人员避开隐形陷阱,一次性完成LaTeX提交,提升投稿效率。特别针对`.bst`和`.cls`文件的正确处理提供了专业指导。

weixin_42522964的博客 445

java中的规则执行器

用来处理大量的if 的判断逻辑,其包含and 与or的穿插使用。

weixin_44576239的博客 373

基于STM32的电子时钟设计

基于STM32的电子时钟设计1、设计目的2、设计具体要求3、proteus仿真图4、程序代码 1、设计目的 (1)掌握使用KEIL MDK5进行软件开发的具体流程; (2)掌握硬件电路的设计方法; (3)掌握STM32微控制器的程序设计及代码编写方法。 2、设计具体要求 (1)通过STM32自带的实时时钟功能获取时间信息; (2)在OLED显示屏上显示日期、时、分、秒等时间信息; (3)通过按键可对时间信息进行修改; (4)具有闹钟设定功能; (5)加分项:自行增加其他功能。 3、proteus仿真图 4

唯一的博客 2万+

关于基于Midas Civil API的二次开发——PyMiMi

现在写了第一条博客,希望是一个好的开始,能够每天抽出一两个小时或者更多的时间来写写代码,研究研究。我发现在我的工作中存在着大量的重复性工作,对于文档的开发是好办的,毕竟网上有现成库,只需要pip一下拿来用就好,但是对于Midas而言,在24版本之前官方都是没有一个可以使用的接口的,可能mct文件算半个?

ManiacsTraitor的博客 1853

规则引擎在Java项目中的应用

推理引擎是根据事实和规则进行推理的核心部分,它的作用是将事实与规则进行匹配,并得出结论。规则引擎是一种能够将业务规则形式化、集中管理的软件系统,它能够将业务规则与应用程序分离,提高系统的可维护性、可扩展性和可重用性。本文将介绍规则引擎在Java项目中的应用,包括规则引擎的基本原理、优势和实现方式。规则引擎是一种基于规则的软件系统,它由三部分组成:规则库、推理引擎和规则执行器。其中,规则库是存储业务规则的地方,推理引擎是根据业务规则进行推理的核心部分,规则执行器是将推理结果应用到业务场景中的部分。

Pandfson的专栏 3175

BrepNet实战:5分钟搞定三维CAD模型的加工特征识别(附Python代码)

本文详细介绍了BrepNet在三维CAD模型加工特征识别中的实战应用,通过Python代码演示了从环境搭建到模型训练的全流程。BrepNet基于边界表示(BRep)的深度学习框架,能够高效识别加工特征,显著提升工业设计和智能制造领域的效率。文章还提供了性能优化和部署建议,帮助开发者快速实现AI驱动的几何特征识别。

weixin_29044713的博客 515

if 判断泛滥?试一试规则执行器,太香了!

????这是一个或许对你有用的社群????一对一交流/面试小册/简历优化/求职解惑,欢迎加入「芋道快速开发平台」知识星球。下面是星球提供的部分资料:《项目实战(视频)》:从书中学,往事中“练”《互联网高频面试题》:面朝简历学习,春暖花开《架构 x 系统设计》:摧枯拉朽,掌控面试高频场景题《精进 Java 学习指南》:系统学习,互联网主流技术栈《必读 Java 源码专栏》:知其然,知其所以然????这是一个或许...

weixin_44421461的博客 306

audio语音相关的基础知识-VAD,ASR,AEC,AGC,BF等

有音素之间的间隙,也有静音和语音本身的间隙,为了对数据从时间上进行相对的校准,语音端点检测技术就应运而生了,因此端点检测技术可以决定这种校准的相对精度,使得同一内容的特征更趋于相同,当然,一般情况下是不可能完全相同的。盲源分离的目的是求得源信号的最佳估计,盲辨识的目的是求得传输通道的。这个技术的主要任务是从带有噪声的语音中准确的定位出语音的开始和结束点,因为语音中含有很长的静音,也就是把静音和实际语音分离开来,因为是语音数据的原始处理,所以VAD是语音信号处理过程的关键技术之一。呈现出与会者清晰的声音。

u013250861的博客 1035

dolphinscheduler-3.4.0

dolphinscheduler集群部署

docsz的博客 661
上一篇: 深入java虚拟机:原子操作ParkEvent和Parker
下一篇: 四面字节跳动Java研发岗,最终拿下Offer,只有努力,方能成功
奇迹摘星w
博客等级 码龄6年 1844粉丝 189原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值