GoRules:Go的业务规则引擎

这篇具有很好参考价值的文章主要介绍了GoRules:Go的业务规则引擎。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

ZEN Engine 是一个跨平台、开源业务规则引擎 (BRE)。它是用 Rust 编写的,并提供NodeJS、Python和Go的本机绑定。 ZEN Engine 允许从 JSON 文件加载和执行 JSON 决策模型 (JDM)。

我们的JDM Editor存储库上提供了开源 React 编辑器。

安装
go get github.com/gorules/zen-go

用法
ZEN Engine 构建为可嵌入的 BRE,适用于您的Rust、NodeJS、Python或Go应用程序。它从 JSON 内容解析 JDM。您可以自行决定是否从文件系统、数据库或服务调用中获取 JSON 内容。

加载并执行规则

package main

import (
"fmt"
"os"
"path"
)

func readTestFile(key string) ([]byte, error) {
filePath := path.Join("test-data", key)
return os.ReadFile(filePath)
}

func main() {
engine := zen.NewEngine(zen.EngineConfig{Loader: readTestFile})
defer engine.Dispose() // Call to avoid leaks

    output, err := engine.Evaluate("rule.json", map[string]any{})
if err != nil {
fmt.Println(err)
}

    fmt.Println(output)
}

有关规则格式和高级用法的更多详细信息,请查看文档。

JSON 决策模型 (JDM)
GoRules JDM(JSON 决策模型)是一个建模框架,旨在简化决策模型的表示和实现。

了解 GoRules JDM
GoRules JDM 的核心围绕决策模型的概念,即以 JSON 格式存储的互连图。这些图表捕获了 GoRules Zen 引擎中各种决策点、条件和结果之间的复杂关系。

图是通过将节点与边连接起来而形成的,这些边就像将信息从一个节点移动到另一个节点(通常是从左到右)的路径。

输入节点充当与上下文相关的所有数据的入口,而输出节点则产生决策过程的结果。数据的传输遵循从输入节点到输出节点的路径,遍历其间所有互连的节点。当数据流经该网络时,它会在每个节点处进行评估,并且连接决定数据沿着图传递的位置。

要查看 JDM Graph 的实际效果,您可以使用带有内置模拟器的免费在线编辑器。

除了图输入节点(请求)和输出节点(响应)之外,还有 5 种主要节点类型:

  • 决策表节点
  • 切换节点
  • 功能节点
  • 表达节点
  • 决策节点

决策表节点
概述
表格提供了决策过程的结构化表示,允许开发人员和业务用户以清晰简洁的方式表达复杂的规则。

结构
决策表的核心是它的模式,用输入和输出定义结构。输入包括使用 ZEN 表达式语言的业务友好表达式,适应一系列条件,例如相等、数字比较、布尔值、日期时间函数、数组函数等。该模式的输出规定了决策表生成的结果的形式。输入和输出通过用户友好的界面表示,通常类似于电子表格。这有助于轻松修改和添加规则,使业务用户能够为决策逻辑做出贡献,而无需深入研究复杂的代码。

评估流程
决策表从上到下逐行评估,遵循指定的命中策略。单行通过输入列从左到右进行评估。每个输入列代表AND运算符。如果单元格为空,则该列将被真实评估,与值无关。

如果行中的单个单元格失败(由于错误或其他原因),则跳过该行。

命中策略
命中策略根据匹配规则确定结果计算。

评估结果为:

  • 如果决策表的命中策略first与规则匹配,则为对象。该结构由输出字段定义。内部带有点 (.) 的限定字段名称会导致嵌套对象。
  • null/undefinedfirst如果命中策略中没有匹配的规则
  • 如果决策表的命中策略是(collect每个匹配规则一个数组项),则为对象数组;如果没有规则匹配,则为空数组

输入
在规则或行的评估中,输入列体现了AND运算符。这些值通常由(限定)名称组成,例如customer.country或customer.age。

输入的评估有两种类型,Unary和Expression。

一元评估
当我们想要分别比较传入上下文中的单个字段时,通常使用一元求值,例如customer.country和cart.total。当列field在其模式中定义时,它被激活。

例子

对于输入:

{
"customer": {
"country": "US"
},
"cart": {
"total": 1500
}
}

这个评估转化为

IF customer.country == 'US' AND cart.total > 1000 THEN {"fees": {"percent": 2}}
ELSE IF customer.country == 'US' THEN {"fees": {"flat": 30}}
ELSE IF customer.country == 'CA' OR customer.country == 'MX' THEN {"fees": {"flat": 50}}
ELSE {"fees": {"flat": 150}}

表达评估
当我们想在单个单元格内创建更复杂的求值逻辑时,可以使用表达式求值。它允许我们比较同一单元格内传入上下文的多个字段。
可以通过提供空的内部列配置来使用它Selector (field)。

输出
输出列充当评估期间满足条件时决策表将生成的数据的蓝图。
当决策表中的一行满足其指定条件时,输出列确定将返回的信息的性质和结构。每个输出列代表一个不同的字段,这些字段的集合形成与已验证行关联的输出或结果。这种机制允许决策表精确定义和控制数据输出。

切换节点(新)
GoRules JDM 中的 Switch 节点向决策模型引入了动态分支机制,使图能够根据条件发散。

条件是用 Zen 表达式语言编写的。

通过合并 Switch 节点,决策模型变得更加灵活和上下文感知。在需要基于不同输入的不同决策逻辑的场景中,此功能特别有价值。 Switch 节点有效地管理图中的分支,增强 GoRules JDM 中决策模型的整体复杂性和现实性,使其成为构建智能和自适应系统的关键组件。

Switch节点保留传入的数据而不做任何修改;它将整个上下文转发到输出分支。

命中策略
切换节点有两个 HitPolicy 选项,first和collect。
在首次命中策略的上下文中,图分支到初始匹配条件,类似于在表中观察到的行为。相反,在收集命中策略下,该图扩展到条件成立的所有分支,从而允许分支到多个路径。
注意:如果同一条件有多个边,则不保证执行顺序。

函数节点
函数节点是 JavaScript 片段,允许使用 JavaScript 快速轻松地解析、重新映射或以其他方式修改数据。节点的输入作为函数的参数提供。函数在捆绑到 ZEN 引擎中的 QuickJS 引擎之上执行。

函数超时设置为 50ms。

const handler = (input, {dayjs, Big}) => {
return {
...input,
someField: 'hello'
};
};

有两个内置库:

  • dayjs - 用于日期操作
  • big.js - 用于任意精度的十进制算术。

表达节点
表达式节点用作使用 Zen 表达式语言将输入对象转换为替代对象的工具。指定输出属性时,每个属性都需要单独的行。这些行由两个字段定义:

  • Key - 输出属性的限定名称

  • 价值——通过禅宗表达语言表达的价值

注意:表达式节点中的任何错误都会导致图表停止。

决策节点
“决策”节点旨在扩展决策模型的功能。其功能是在执行过程中调用和重用其他决策模型。
通过合并“决策”节点,开发人员可以模块化决策逻辑,从而提高复杂系统的可重用性和可维护性。

项目点击标题 https://www.jdon.com/72453.html文章来源地址https://www.toymoban.com/news/detail-826453.html

到了这里,关于GoRules:Go的业务规则引擎的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 规则引擎调研及初步使用

    生产过程中,线上的业务规则内嵌在系统的各处代码中,每次策略的调整都需要更新线上系统,进行从需求-设计-编码-测试-上线这种长周期的流程,满足不了业务规则的快速变化以及低成本的更新试错迭代。 因此需要有一种解决方案将 商业决策逻辑 和应用开发者的 技术决

    2024年02月09日
    浏览(75)
  • 【规则引擎】Drools急速入门

    1.Drools规则引擎简介 (1)什么是规则引擎 ​ 全称为业务规则管理系统,英⽂名为BRMS(即 Business Rule Management System)。规则引擎的主要思想是将应用程序中的业务决策部分分离出来,并使用预定义的语义模块编写业务决策(业务规则),由用户或开发者在需要时进行配置、管理

    2024年02月05日
    浏览(37)
  • Drools规则引擎

    Drools(Drools Rule Engine)是一个开源的规则引擎,它主要用于在Java应用程序中实现规则管理。Drools规则引擎将规则定义和管理从应用程序代码中分离出来,使得规则可以独立于应用程序运行。这样可以提高规则的可靠性和可维护性,同时也可以使得规则的更新和管理更加方便。

    2024年02月07日
    浏览(48)
  • Java中的规则引擎

    Java 中的 规则 引擎为我们提供了一个以灵活且定义的方式管理和执行业务规则的框架 。这些引擎使开发人员能够在不更改核心应用程序的情况下更轻松地修改和理解规则,从而将业务逻辑与应用程序代码分开。 规则引擎旨在评估条件并根据指定规则触发操作 。它们还为我们

    2024年04月09日
    浏览(47)
  • 规则引擎----easy rules

    将复杂的if else判断剥离出来 2.1、引入POM 2.2、编写规则 2.2.1、注解 2.2.2、表达式 2.2.3 yml配置文件 2.2.4 组合规则 2.2.5 组合规则说明 类 说明 UnitRuleGroup 要么应用所有规则,要么不应用任何规则(AND逻辑) ActivationRuleGroup 它触发第一个适用规则,并忽略组中的其他规则(XOR逻辑

    2024年02月13日
    浏览(42)
  • flink规则引擎设计思路

    在日常工作中我们经常收到一些诸如此类需求:“用户给点击了开屏广告,给用户下发私信”、“用户进入了推荐线,但在60秒内没有任何点击操作,弹框引导用户选择感兴趣的内容”、“用户点赞了某位作者的两篇以上的内容,但并没有关注过此作者,则弹框引导用户关注

    2024年02月05日
    浏览(40)
  • Drools 规则引擎原理

    基于Java的开源的规则引擎框架有很多,从实现原理上来说分为以下三类: 通过Java语言+RETE算法实现(drools和urule) 通过脚本语言+jvm实现(groovy) 通过Java表达式+jvm实现(Aviator) 从“频繁且通用”的业务变化中抽象出来的中间服务层,实现了将决策逻辑从应用代码中分离出来,

    2024年02月08日
    浏览(51)
  • EasyRules规则引擎工具类

    EasyRules是一款基于Java的开源的轻量级的规则引擎框架。它可以帮助开发人员快速开发并管理规则,实现应用程序的自动化决策。EasyRules框架非常易于使用,且可以与任何Java应用程序无缝集成。在本文中,我们将对其进行一个简单的封装,以实现复杂的规则表达式匹配。 Eas

    2024年02月13日
    浏览(47)
  • LiteFlow规则引擎的入门

    1、LiteFlow简介 LiteFlow是一个非常强大的现代化的规则引擎框架,融合了编排特性和规则引擎的所有特性。 利用LiteFlow,你可以将瀑布流式的代码,转变成以组件为核心概念的代码结构,这种结构的好处是可以任意编排,组件与组件之间是解耦的,组件可以用脚本来定义,组件

    2024年02月05日
    浏览(45)
  • urule规则引擎使用(2022详细)

    因为工作上遇到了urule开源版本规则引擎,所以在这里 介绍一下自己是如何使用的 这里是免费版本2.0和pro3.0的功能比较: URULE PRO版与开源版主要功能比较 特性 URULE PRO版 URULE开源版 向导式决策集 有 有 脚本式决策集 有 有 决策树 有 有 决策流 有 有 决策表 有 有 交叉决策表

    2024年02月05日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包