『.NET 高手必备』深入浅出RulesEngine:业务逻辑抽象新利器!

news2024/9/21 20:19:28

     亲爱的朋友们,我是许泽宇,今天我要和大家探讨一款强大的业务规则库——Microsoft RulesEngine。在软件开发中,业务逻辑的变更和扩展往往如同“潘多拉魔盒”,一旦打开就难以收拾。RulesEngine 的设计理念就是为了解决这个难题,它能够将业务逻辑独立出来,使得业务规则变更不再影响核心系统的稳定性。下面就为大家详细介绍这个在Github热门开源的神器。

https://github.com/microsoft/RulesEngine

RulesEngine 详解

        首先,让我们来看看RulesEngine的官方定义:它是一个可用作库或NuGet包的工具,用于将业务逻辑、规则、策略从系统中抽象出来。简单的说,使用RulesEngine就能让你把规则存放在系统核心逻辑之外的存储中,这意味着任何的规则变动都将不会影响到核心系统。

如何安装

        安装RulesEngine非常简单,只需前往nuget.org下载最新版本的NuGet包,并在你的项目中引用即可。

如何使用

        RulesEngine提供了丰富的工作流配置方式,你可以根据提供的模式定义存储规则,并选择如Azure Blob Storage、Cosmos DB、Azure App Configuration、Entity Framework、SQL Servers、文件系统等任意合适的存储方式。当然,如果你的规则表达是Lambda表达式类型,那就更直截了当了。

编写规则实例

        举个例子,如果你想为顾客制定一个购物打折规则,可以编写如下规则:

[  {    "WorkflowName": "Discount",    "Rules": [      {        "RuleName": "GiveDiscount10",        "SuccessEvent": "10",        "ErrorMessage": "One or more adjust rules failed.",        "ErrorType": "Error",        "RuleExpressionType": "LambdaExpression",        "Expression": "input1.country == \"india\" AND input1.loyaltyFactor <= 2 AND input1.totalPurchasesToDate >= 5000"      },      {        "RuleName": "GiveDiscount20",        "SuccessEvent": "20",        "ErrorMessage": "One or more adjust rules failed.",        "ErrorType": "Error",        "RuleExpressionType": "LambdaExpression",        "Expression": "input1.country == \"india\" AND input1.loyaltyFactor >= 3 AND input1.totalPurchasesToDate >= 10000"      }    ]  }]

        编写完毕后,你可以通过以下代码将规则注入到Rules Engine中:

var rulesEngine = new RulesEngine.RulesEngine(workflow);

        其中,workflow是一个基于上述模式解析的对象列表。初始化完成后,你需要执行Rules Engine的执行方法ExecuteAllRulesAsync:

List<RuleResultTree> response = await rulesEngine.ExecuteAllRulesAsync(workflowName, input);

        执行结果将返回一个包含RuleResultTree列表的响应,告诉你每个规则是否通过。

        仅通过代码的简单示例如下:

List<Rule> rules = new List<Rule>();
Rule rule = new Rule();rule.RuleName = "Test Rule";rule.SuccessEvent = "Count is within tolerance.";rule.ErrorMessage = "Over expected.";rule.Expression = "count < 3";rule.RuleExpressionType = RuleExpressionType.LambdaExpression;rules.Add(rule);
var workflows = new List<Workflow>();
Workflow exampleWorkflow = new Workflow();exampleWorkflow.WorkflowName = "Example Workflow";exampleWorkflow.Rules = rules;
workflows.Add(exampleWorkflow);
var bre = new RulesEngine.RulesEngine(workflows.ToArray());

        想要深入了解RulesEngine如何使用,请查看官方Wiki的Getting Started页面,里面有详细的实例演示。同时,你还可以通过我们提供的Demo应用来实现快速上手。

它是如何工作的

图片

其他亮点

        值得一提的是,除了基本的使用方法,RulesEngine还支持结合Entity Framework使用,同时也有基于Blazor的RulesEngine 编辑器,你可以通过

https://github.com/alexreich/RulesEngineEditor

        查看更多信息。甚至还支持安装为PWA,实现离线使用。

结语

        .NET的朋友们,是时候让自己的应用更加灵活和强大了。抓住规则引擎RulesEngine,抽象你的业务逻辑,享受编程带来的便利吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2144354.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从“治理”到“智理”,看大模型如何赋能智慧政务

一、从治理到智理的飞跃 在智慧城市的建设蓝图中&#xff0c;智慧政务如同一股不可忽视的力量&#xff0c;正悄然改变着城市的治理面貌。传统意义上&#xff0c;“治理”往往意味着对复杂社会现象的被动应对&#xff0c;而“智理”则预示着通过智能化手段主动预见、解决问题的…

最优化理论与自动驾驶(一):概述

目录 1. 最优化理论的原理 2. 最优化问题的分类 1. 按目标函数的性质分类 2. 按变量的性质分类 3. 按约束条件分类 4. 按时间维度分类 5. 按不确定性分类 6. 按决策变量的维度分类 3. 常用的最优化方法 1. 梯度类优化算法 2. 约束优化算法 3. 启发式算法 4. 线性规…

Internet选项检查所存网页的较新版本的设置

每次访问此页时检查代表着,你无论打开任何网页时,都不用IE缓存,直接刷新浏览每次启动IE时检查,代表着,只要你IE浏览器不关闭,,那么他在访问相当网站,网页时,就会调用IE缓存(你会感觉打开非常快),这时候,他并没有下载网页,,只是调用缓存而已。。但是如果你关闭IE浏览器,再重新打…

考软考的信息安全工程师,有什么诀窍在一个月内通过吗?

一般是至少是2个月时间拿来备考的&#xff0c;低于2个月的话&#xff0c;时间肯定是比较赶的。虽然一个月时间相对紧张&#xff0c;但通过合理规划和高效利用时间&#xff0c;也是有可能成功通过考试的。以下是一份详细的备考策略&#xff0c;旨在帮助大家在有限的时间内最大化…

springboot家政服务管理系统—计算机毕业设计源码34242

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…

数据结构与算法——顺序表期末复习五大经典题型

目录 一&#xff1a;顺序表-移除元素 二&#xff1a;顺序表-删除有序数组中的重复项 三&#xff1a;顺序表-合并两个有序数组 四&#xff1a;顺序表-旋转数组 五&#xff1a;顺序表-数组形式的整数加法 一&#xff1a;顺序表-移除元素 题型链接&#xff1a;27. 移除元素 -…

【期末复习】大二下系列 公共课专业课 复习笔记合集

计算机网络 老师划重点 第一章 计算机网络概述 1.3 互联网概述&#xff08;概念&#xff0c;因特网四个阶段&#xff09; 因特网四个阶段&#xff1a; 因特网草案建议标准草案标准因特网标准 1.5 计算机网络的主要性能指标 1.6 计算机网络体系结构&#xff08;三种划分和各…

黑神话悟空mac可以玩吗

黑神话悟空mac上能不能玩对于苹果玩家来说很重要&#xff0c;那么黑神话悟空mac可以玩吗&#xff1f;目前是玩不了了&#xff0c;没有针对ios系统的版本&#xff0c;只能之后在云平台上找找了&#xff0c;大家可以再观望下看看。 黑神话悟空mac可以玩吗 ‌使用CrossOver‌&…

cdr怎么画虚线?

虚线是以点或者短线画成的断续的线&#xff0c;多用于几何图形或者标记。我们在平常学习工作中经常使用标记的方式。根据国标制图规定 机械制图 图样画法 图线规定&#xff0c;技术图样中&#xff0c;主要使用细虚线和粗虚线两种&#xff0c;细虚线用以表示不可见棱边线和不可见…

Feed流系统重构:架构篇

重构对我而言&#xff0c;最大的乐趣在于解决问题。我曾参与一个C#彩票算奖系统的重构&#xff0c;那时系统常因超时引发用户投诉。接手任务时&#xff0c;我既激动又紧张&#xff0c;连续两天几乎废寝忘食地编码。结果令人振奋&#xff0c;算奖时间从一小时大幅缩短至十分钟。…

半导体行业跨国文件传输解决方案

在数字化浪潮席卷全球的今天&#xff0c;半导体行业无疑是科技创新的先锋。随着对数据传输需求的激增&#xff0c;传统的文件传输协议FTP在处理半导体行业庞大的文件量和复杂的文件结构时显得捉襟见肘。尤其是在跨国文件传输场景中&#xff0c;传统方法已经难以跟上行业的发展步…

你了解什么是场外期权吗?

今天期权懂带你了解你了解什么是场外期权吗&#xff1f;场外期权是指在交易所之外进行交易的期权合约。这类期权通常是由买卖双方通过私人协议进行交易&#xff0c;而不是在标准化的交易所上进行。 场外期权的特点 1.定制化&#xff1a;场外期权合约可以根据交易双方的具体需…

AI写作神器:助力体制内小白轻松完成材料撰写,减少慌张茫然

刚刚进入体制内的工作者&#xff0c;对于公文材料撰写基本无从下手&#xff0c;力不从心&#xff0c;提交稿件后&#xff0c;反馈的问题大多存在结构格式不对、文字口语化&#xff0c;缺少理论依据等&#xff0c;笔者是做互联网的&#xff0c;所以对AI工具比较了解&#xff0c;…

FPGA在AI时代的应用与挑战:《详解FPGA:人工智能时代的驱动引擎》(可下载)

在当今这个信息爆炸的时代&#xff0c;人工智能&#xff08;AI&#xff09;和大数据已经成为了推动技术进步和产业革新的核心力量。在这一浪潮中&#xff0c;FPGA作为一种极具灵活性和强大计算能力的半导体器件&#xff0c;正扮演着越来越重要的角色。 本片文章将为你带来书籍…

战神诸神黄昏9月19日登录PC端! 手机怎么玩战神诸神黄昏

9月19日&#xff0c;《战神&#xff1a;诸神黄昏》正式登录PC端&#xff0c;这是一部动作冒险游戏。要是你想随时随地在手机或平板上也能玩《战神&#xff1a;诸神黄昏》&#xff0c;可以使用网易GameViewer远程帮你实现。 网易GameViewer远程作为一款专为游戏玩家打造的远程软…

智能硬件从零开始的设计生产流程

文章目录 市场分析团队组建ID设计结构设计pcba设计软件开发手板EVT开模DVTPVTMP 智能硬件研发是一个复杂的过程, 当然一件事要发出萌芽必须得有人, 有一天,几个合伙人凑在一起,说一起开发个智能硬件产品吧,于是故事开始了. 市场分析 合伙人: 万物互联的时代, 智能音箱已经成为…

【LeetCode每日一题】2024年9月第二周(下)

2024.9.13 困难 难度评分1917 链接&#xff1a;2398. 预算内的最多机器人数目 &#xff08;1&#xff09;题目描述&#xff1a; &#xff08;2&#xff09;示例 &#xff08;3&#xff09;分析 翻译一下题目&#xff1a;要求我们在给定的 chargeTimes 和 runningCosts 数组以…

ELFK日志分析平台,架构和通信

整个架构&#xff0c;加上跳板机&#xff0c;总共12台机器 技术方案&#xff1a; 1. 配置nfs服务器&#xff0c;为web集群提供共享网络文件系统 # 部署 NFS 服务 [rootnfs ~]# dnf install -y nfs-utils [rootnfs ~]# vim /etc/exports /var/webroot 192.168.1.0/24(rw,…

当代世界最著名的哲学家颜廷利:21世纪全球华人最前沿的思想家教育家

在人类的视觉体验中&#xff0c;仅有两种现象深刻影响着我们的视力&#xff1a;近视与老花。前者多在青少年时期悄然降临&#xff0c;而后者则常伴随中年之后的生活。有趣的是&#xff0c;当我们以创意的眼光观察英文字母时&#xff0c;bd组合呈现出的向下眼镜提醒我们&#xf…

Red Hat 和 Debian Linux 对比

原图的作者(https://bbs.deepin.org/post/209759) Red Hat Enterprise Linux https://www.redhat.com/ CentOS Linux https://www.centos.org/ Fedora Linux https://fedoraproject.org/ Debian https://www.debian.org/ Ubuntu https://cn.ubuntu.com/ https://ubuntu.c…