规则,是运行、运作规律所遵循的法则。规则无处不在,社会活动中的规则通常由传统、公共认识形成,表现为该干什么或是不该干什么。在计算机应用系统中,经常会面对这样的场景,处理执行一个动作时,需要另外的条件同时成立,这种条件判断的逻辑被抽象成规则并大量应用。通过对规则的管理和使用,会使得系统在已抽象成业务规则的场景中,可以进行灵活管理,灵活应用。特别是多个场景下使用相同的规则,可确保因复用带来的成本降低和达成业务管理一致性。
业务规则抽象已经成为一种良好的设计模式,特别是在很多大型业务系统的实现中几乎通用。避无可避,不管是传统的高代码开发还是通过低代码方式实现,应用开发中都会面临着规则开发和使用的问题。
本文旨在探讨低代码模式下开发活动中对规则的处理,文中实际支撑平台为浩鲸灵犀开发平台。
业务规则抽象
在网购的体验中发现,购买一本书时,往往没有优惠。但当订单总金额满足一定条件时,就能够打折,如满300减50,或者免运费、送赠品等。实际上,不仅仅是购买书籍,购买其他商品时也存在各种折扣和优惠。
然而,在系统实现的过程中,如果为每个商品单独开发促销逻辑,对开发人员来说是一项巨大的工作量,因为电商平台上的商品种类、数量非常庞大。
实际上,大多数的商家,都是通过订单金额达量、商品数量达量,或者特殊商品属性等手段,来实现促销活动。可以将其抽象成一个通用的促销规则:根据订购的商品,进行优惠条件判断、优惠计算、最终输出优惠结果。商家只需要配置商品的优惠策略,系统就能够自动计算实现不同促销场景的逻辑。
在系统中,实现以上规则的逻辑如下:
首先,需要考虑的数据包括用户订购的商品信息以及商家设置的商品优惠策略信息。这些数据将在规则的逻辑实现中被使用。
其次,逻辑判断过程包括以下几个步骤:
-
判断是否有优惠策略。商品信息作为规则的传入参数,判断该商品是否有配置优惠策略。
-
判断优惠条件是否成立。根据订购的商品信息和商家配置的优惠策略,计算是否满足优惠的条件。
-
优惠计算。根据配置的优惠方式,进行打折计算、赠品计算或者免运费计算等。
-
输出优惠结果。规则计算后的优惠结果输出给业务系统,完成商品价格的调整。
接下来将介绍如何通过低代码来完成以上规则的配置。
业务规则配置
在低代码中,复杂规则配置开发主要依靠直观的图形配置界面,以"入参+组件+出参"的方式,通过简单的拖拽和配置操作,实现规则数据配置、逻辑配置及结果反馈。
第一步 参数配置,包括以下几个方面:
入参数据:通过可视化功能,用户可以定义规则的入参数据。
从案例中可以看到,规则的入参是订购的商品列表,因此以表单的方式进行参数配置,支持以结构树的方式进行展示,支持属性、对象、数组等不同形式的参数配置,是一种比较好的实践。
应用数据:规则中可能需要使用到应用的业务数据。因此,规则开发过程中需要支持集成SQL服务、编排服务、对象操作服务等方式来获取数据,并且能够将这些数据与规则的逻辑组件结合起来进行应用。
案例中,商品优惠策略信息,属于商家在系统中配置的数据。在浩鲸灵犀开发平台中,规则逻辑编排时获取内部数据是非常简单的事情,因为其内置了一个对象引擎,封装了各种对象操作组件,只需要进行对象、动作、条件的选择即可轻松完成数据的操作,如下图:
除了入参数据和应用参数外,很多规则的实现过程中还涉及到外部数据和系统变量。
- 外部数据:指的是不在本应用内的数据,需要通过接口的方式获取。这需要支持可视化的方式集成外部接口,获取数据并进行操作。
- 系统变量:如登录信息、环境信息等系统变量,也是逻辑判断中不可或缺的数据。因此,支持可视化的方式操作这些变量,也是必不可少的功能。
第二步:逻辑配置
在低代码平台中实现逻辑的方式是通过数据和动作的组合来完成的。针对各种逻辑需求,应该提供各种逻辑组件的配置,包括:
比较:规则逻辑配置过程中,支持字符串、数据、属性与对象以及数组的比较,以实现规则条件的定义。比如判断两个字符串是否相等、对数据进行大小比较、判断属性是否存在于对象中,或者判断一个数组是否包含某个元素等。
计算:提供各种计算功能的配置,比如数据计算、字符或者数组的长度计算等。
流程控制:能够根据判断条件配置程序的执行路径,如循环、跳出、分支、退出等。
组件组合:可以通过定义组件的执行顺序来实现串联,从而实现组件的组合。
获取商家配置的优惠策略信息,判断商品是否有配置优惠,并进行优惠计算的过程,只需要按顺序配置 “数据组件”获取商品优惠策略信息,“比较组件”判断是否有优惠策略,“计算组件”进行打折计算,就可以轻松完成规则逻辑的编排。
第三步:结果反馈
在配置过程中,以显性化的方式配置规则的返回参数,易于规则的开发和理解。
第四步:测试验证
调试时,执行过的节点高亮展示,形成执行线路图。每个节点的执行时间、时长、入参、出参、执行状态,根据执行顺序进行展示,为规则执行过程中的问题排查提供了非常好的手段。
以上是规则配置的过程,下面我们继续介绍规则的使用。
业务规则使用
在许多场景中,业务系统需要通过多个规则才能完成完整的业务校验。以商品订购的场景为例,在订单提交前进行业务校验,校验的规则可能有上百个。因此,为了更好地实现规则的开放调用,需要以规则事件的维度做好规则的封装,同时支持传统应用和低代码应用的集成。
首先,事件配置,事件是指业务系统调用规则的时机或者动作,用于说明和区分业务系统在不同代码中的埋点,同时规范埋点的参数要求。事件配置主要完成两项操作:
- 参数规范定义:根据业务系统的需求,自定义埋点参数规范,以适配各个业务系统。同一个事件下的所有规则都遵循统一的参数规范。
- 规则执行的策略编排:支持在事件中对规则的执行顺序和策略进行编排,包括条件、串行、并行等不同的策略。
其次,规则集成,针对应用的不同,规则集成的方式有两种:
- API方式:针对传统的应用,需要通过在系统代码中进行埋点,实现规则事件的调用。
- 服务节点方式:针对低代码应用,业务逻辑主要通过编排服务来实现。因此,在编排服务中需要支持通过“事件”组件来绑定事件服务,从而实现对规则的调用。
业务规则管理
除了规则的配置开发和对外开放使用,规则的管理还包括规则的发布上线、规则的生失效管理以及对规则的日志分析。
发布上线:不同的低代码实现,规则的保存形式有所不同,一般以编译文件的形式保存,如Java、PHP,或者使用Python、Groovy脚本等。而灵犀平台选择了以数据的方式进行存储。在发布规则时,只需要导出规则数据,然后在运行环境中进行数据的导入,即可实现规则的发布,无需进行环境部署或代码编译构建的复杂操作。这种方式简化了规则发布的流程,提高了开发效率。
生/失效管理:在规则设计中,可以设定规则的生效时间和失效时间,只有在指定的时间段内规则才会生效。这项功能对于季节性规则或限时促销规则非常有用,可以避免规则在过期后继续生效,从而避免不必要的冲突和问题。同时,规则生/失效状态的管理也非常重要。通过规则状态的控制,可以及时根据业务要求进行规则的调整和决策。
规则日志:日志在规则管理中有两个重要部分。首先,操作日志记录了对规则的逻辑调整和状态变更等操作,方便问题的溯源。其次,运行日志记录了规则执行时的输入参数、输出结果、执行时间、耗时和异常原因等,有助于快速定位和解决问题。
除了支持可视化、图形化的规则开发、使用和管理功能,我们还需要重点关注配置效率和配置灵活性这两方面的问题:
01 配置效率问题
在配置规则过程中,不同复杂度的参数对象,会导致配置效率降低,遇到多规则开发场景时,效率问题愈发凸显。所以,我们需要增强工具自身能力,通过自动生成、缺省默认、一键操作、批量处理等方式来应对效率问题:
自动生成参数:在事件上,增加规则创建的入口,创建规则时,自动通过事件的参数规范生成规则的参数,并允许对参数进行裁剪。
自动参数赋值:在规则编排过程中实现参数自动赋值功能。在服务编排中加入事件节点时,或者在事件中加入规则时,都可以根据参数名称自动匹配上下文进行赋值。
报文一键生成参数:在事件和规则配置参数时,支持通过报文一键生成参数配置,在传统开发过程中,高效的ctrl+c和ctrl+v能够得到很好的应用。
批量加入规则:在事件编排中增加批量规则组件,在组件中可以批量选择多个规则加入到事件中。组内可以定义规则执行的策略,如串行或者并行。这样既能简化事件编排画布,又能提升加入规则的效率。
增加运维视图:在事件中增加关联规则的视图,同时在规则设计器中也增加关联的事件视图,在调整规则时就可以清晰地评估其影响范围。
02 配置灵活性问题
与传统规则引擎不同,低代码平台的规则执行策略是通过事件编排来实现的,执行过程会遇到所有规则执行结果合并、同一事件下参数相互依赖和共享等问题。因此,技术上需要支持规则结果的汇总计算、支持事件级的数据总线,实现数据的共享和传递。
增加规则结果计算组件。每加入或删除一个规则,会自动将规则的结果和返回参数记录到该组件中。在组件中支持设置结果返回的策略,例如:全部规则校验成功时返回成功,或者只要有一个成功就返回成功。
引入事件级dataBus数据总线。在事件启动环节初始化数据总线,在事件结束后销毁数据储存空间。在此过程中,每个规则都可以向数据总结写入数据和读取数据。
针对复杂业务规则开发,浩鲸灵犀开发平台提供了非常便利的开发工具,在大量项目中落地使用。通过浩鲸灵犀开发平台让开发人员能够轻松完成规则的配置工作,真正实现了业务规则可视化管理、图形化开发,开发效率大幅提升,可做到实时发布非常灵活。在接下来继续与大模型技术结合,实现更智能化的业务规则管理和决策支持、自动化的规则验证和修正、业务规则的执行和监控相结合等技术突破,未来可期。