流程/规则引擎-ice介绍
0.代码地址
https://github.com/zjn-zjn/ice
1.产生背景
想到“通过什么->得到什么”类问题,第一个想到的恐怕就是活动类项目的开发,用户通过一系列行为,得到一系列的东西。但往往这类活动变动性较大,持续性较短,因为活动玩法的不断扩充与产品运营的脑洞不断扩大,刚开始写的一系列通用的规则往往付之一炬,久而久之,就只剩下一些相对独立的抽象出来的基本模块,然后再通过摞代码方式将模块组装起来。
由于一个新活动往往与老玩法有关又无关的特性,新的活动也必须在开发,测试等环节上耗费较大精力,所出问题也比较多,以至于慢慢的,大家基本都认为,做活动类项目,直接摞代码就行,考虑复用性只会增加开发成本,且下个活动能够全部复用上的概率不大。为了找到一个简单,易用的通用营销引擎,曾调研过一系列的规则引擎等(如Activiti,Drools,Flowable),但大多上手较难(ice可能也不简单)。
本人也是深受活动类项目迫害,以至于觉得做活动完全就是一个磨性子的工作。
有迫害就有反抗,于是,ice历经三年多在几经周折与不断变更的情况下诞生了,ice项目核心框架目前已经基本开发完毕,也在实际场景中发挥了举足轻重的作用。
ice只是提供了一种此类问题的解决方案,并不敢说最优,只能说你可能会有所借鉴。
2.ice简介
eg:某商场想举办一个女神节活动,规定
1.活动期间女生用户/拥有商场会员卡的用户可参加活动
2.女性并且拥有商场会员卡的用户,可享受满100元返现50元/满50元返现20元的活动
3.能够参加活动的用户每人赠送1支鲜花
4.商场常年活动:不论是否能参加活动,消费满10000元赠送1个珍藏版商场吉祥物
现在你有:
1个只会通过身份证校验是否是女性用户的员工A
1个只会校验是否有商场会员卡的员工B(但是要报手机号等操作,校验工作比较慢)
3个只会校验消费金额的员工(一个校验100元C 一个校验50元D 一个校验10000元E)
1个只会送钱的员工F(需要被告知送多少 传递告知-上下文)
1个只会送花的员工G(需要被告知送多少 提前告知-配置)
1个只会送吉祥物的员工H(需要被告知送多少 提前告知-配置)
和若干能够了解活动规则,但除了指导用户怎么走,什么都不会的匿名员工
如果是你,要怎么安排?
其实上述所述的员工,就是对一个活动的拆解,做到单一目的的员工,如果下次出现了新活动,需要送吉祥物,直接复用那个会送吉祥物的员工即可,功能足够单一,但是要怎么拼接起来,保证活动的顺利进行呢?
先解释一下上图:
1.所有的校验员工,校验符合则返回TRUE,不符合返回FALSE
2.所有的叶子节点都是会点东西的员工,这里叫叶子节点
3.所有的拥有子节点的员工,这里叫关系节点
关系节点的解释:
1、And 所有子节点中,有一个返回FALSE 该节点也将是FALSE,全部是TRUE才是TRUE,在执行到FALSE的地方终止执行,类似于Java的&&
2、Any 所有子节点中,有一个返回TRUE 该节点也将是TRUE,全部FALSE则FALSE,在执行到true的地方终止执行,类似于Java的||
3、All 所有子节点都会执行,有任意一个返回TRUE该节点也是TRUE,没有TRUE有一个节点是FALSE则FALSE,没有TRUE也没有FALSE则返回NONE,所有子节点执行完毕终止
4、None 所有子节点都会执行,无论子节点返回什么,自己都返回NONE,任何没有子节点的关系节点将自动返回NONE
5、True 所有子节点都会执行,无论子节点返回什么,自己都返回TRUE,任何没有子节点的关系节点将自动返回NONE
写到这里才发现写的有点复杂,例子不是很好,尴尬,哈哈哈…
图中实际上还有些操作可以简化一些,比如8号节点发放的吉祥物奖励,其实可以把7号节点做成一个前置节点,也就是7号必须通过才会执行8号,这样就不再需要3号节点的存在,简化树结构方便阅读和理解。
变化后:
黄色框中的代表前置节点,只有前置节点通过(非FALSE)才可以执行
3.ice能带来什么
1.业务拆解颗粒度可控
如果你现在有一个会校验10000元并且会发吉祥物的员工,那么3-7-8节点可以完全替换成这一个员工,但是显而易见的,这样的员工,下次复用的概率,也不会高,如果下次真的要复用,直接把已经形成大颗粒度的3-7-8号节点拿出去,就可以满足。
2.可扩展性/更改更容易
如果此时,突然被告知,女神节活动只有女生能参加,不再需要和商场会员卡挂钩的那一块内容,那直接和11号节点脱钩即可。
如果此时突然宣布,能够参加的女生必须是国内用户,只需要在4号节点前增加一个判断是否是国内用户的节点即可,其他节点照旧,不受任何影响。
3.配置化更新
可以通过数据库等,实现配置化更新
4.异常出现与恢复
如果此时7号节点突然异常,E员工突发身体不适,那么可以把整棵树和影响用户的信息存储起来,等到E恢复/更换员工后,在将异常数据从7号节点继续执行后续。若此时商场临时决定,给受影响用户补发优惠券作为补偿,也为特别处理提供了可能
备注
ice项目的设计思路已经介绍完毕,目前ice项目已经用于正式的生产并扛过了活动类项目严酷的考验,也在不断探讨着其他应用场景,后续会持续优化,更新相关设计及实现细节。
有更好方案/简易的小伙伴欢迎交流~~
e:995517265@qq.com
流程/规则引擎-ice介绍相关推荐
- 流程/规则引擎-ice举例
由于之前讲的有点乱,例子举的也不是特别好,现重新举例整理分享一下 0.代码地址 https://github.com/zjn-zjn/ice 1.举例 充值送礼 (10.1-10.7) 100元 送5 ...
- 开源规则引擎——ice:致力于解决灵活繁复的硬编码问题
背景介绍 业务中是否写了大量的 if-else?是否受够了这些 if-else 还要经常变动? 业务中是否做了大量抽象,发现新的业务场景还是用不上? 是否各种调研规则引擎,发现不是太重就是接入或维护太 ...
- QLExpress 规则引擎使用介绍
QLExpress 规则引擎使用介绍 一个轻量级的类java语法规则引擎,作为一个嵌入式规则引擎在业务系统中使用.让业务规则定义简便而不失灵活.让业务人员就可以定义业务规则.支持标准的JAVA语法,还 ...
- 规则引擎的介绍与Drools的流程分析
规则引擎(RuleEngine)是一个有限状态机,通过入参实现状态转移,在Java中定义为JSR94规范.规则引擎目前的开源实现主要是JBoss家族的Drools,采用友好的Apache协议(意味着可 ...
- 流程/规则框架-ice设计
0.代码地址 https://github.com/zjn-zjn/ice 1.节点结构 前面的ice介绍中提到用节点将业务拆解,并使用关系节点将业务连接起来并控制业务流转. 结构解释: 1.Base ...
- 规则引擎和流程引擎我该怎么理解
流程引擎 什么是流程引擎 流程引擎就是"业务过程的部分或整体在计算机应用环境下的自动化",它主要解决的是"使在多个参与者之间按照某种预定义的规则传递文档.信息或任务的过程 ...
- springboot之ice规则引擎探索
突然发现一个非常棒的框架,迫不及待的想要和大家分享一下 规则引擎 什么是规则引擎 规则引擎是一种工具,它使得这种计算模型编程变得更容易.它可能是一个完整的开发环境,或者一个可以在传统平台上工作的框架. ...
- 详解:Drools规则引擎探究
引入 ▐ 问题引入 天猫奢品业务方为了吸引更多的新客,和提高会员的活跃度,做了一期活动,通过购买天猫奢品频道内的任意商品就赠送特殊积分,积分可以直接兑换限量的奢品商品.假如业务方给的规则如下: 主刃同 ...
- 小明历险记:规则引擎drools教程一
小明是一家互联网公司的软件工程师,他们公司为了吸引新用户经常会搞活动,小明常常为了做活动加班加点很烦躁,这不今天呀又来了一个活动需求,我们大家一起帮他看看. 小明的烦恼 活动规则是根据用户购买订单的金 ...
最新文章
- [HNOI2015]落忆枫音
- poj 1185(状压dp)
- 判断iis是否已经安装
- SQL Server CheckPoint的几个误区
- 实用ExtJS教程100例-006:ExtJS中Window的用法示例
- 让Visual Studio 2013为你自动生成XML反序列化的类
- WPF应用程序内存泄漏的一些原因
- 信息学奥赛C++语言:由大到小输出1~100的整数
- POST提交数据之---Content-Type的理解;
- 449.序列化和反序列化二叉搜索树
- 三层交换机配置的步骤
- click与onclick的区别
- Windows10创建系统还原点
- 微信小程序的一些基本知识,微信小程序开发
- 学而优则仕:中国古代政治原生态(转自 百度 读书吧)
- Linux Apache FTP-Server架设
- java中一个简单的涂鸦程序
- 2.会计基础--(复式记账、会计凭证与账簿)
- 三国志战略版狼盟和鸿蒙,三国志战略版俘虏有什么用?俘虏作用介绍[多图]
- 5G模块RM500U-CN在ubuntu20.04上的驱动安装
热门文章
- 2015年第六届蓝桥杯省赛Java B组真题+个人题解
- 联想服务器系统改成win7,联想电脑怎么把Win10系统改为win7系统?
- 输入年份,然后打印出该年的万年历,以及标识出当天日期。类似于linux下的cal -y结果。
- 【译】IPSEC.CONF(5) - IPsec配置
- 计算机不间断电源维修,ups电源工作原理和维修技巧,具体故障现象的分析处理!...
- macbook充电_如何判断MacBook是否正在充电
- “《正在爆发的互联网革命》——30余位互联网大腕一致推荐,3.5亿网民必看!”
- 你给我的感悟,我读懂了文字
- Elias Kiritsis《String Theory in a Nutshell》(埃利亚斯·基里西斯《简明弦论》)中文目录
- VMware报错 无法打开内核设备 \\.\Global\vmx86: 系统找不到指定的文件