分享好友 最新动态首页 最新动态分类 切换频道
C# 规则引擎 RulesEngine
2024-12-26 22:26

转自:波多尔斯基

cnblogs.com/podolski/p/14380360.html

前言

当编写应用程序时,经常性需要花费大量的时间与精力处理业务逻辑,往往业务逻辑的变化需要重构或者增加大量代码,对开发测试人员很不友好。

之前在这篇文章说过《C#脚本引擎CS-Script》,可以使用脚本引擎来将我们需要经常变化的代码进行动态编译执行,自由度非常大,不过对应的需要资源也多。如果只是针对非常具体业务逻辑的变化,可以尝试使用RulesEngine对程序进行操作。

下文使用了官方示例且部分内容翻译自说明文档

简介

RulesEngine是微软推出的规则引擎,规则引擎在很多企业开发中有所应用,是处理经常变动需求的一种优雅的方法。个人任务,规则引擎适用于以下的一些场景

  • 输入输出类型数量比较固定,但是执行逻辑经常变化

  • switch条件经常变化,复杂switch语句的替代

  • 会变动的,具有多种条件或者规则的业务逻辑

  • 规则自由度不要求特别高的场景。(这种情况建议使用脚本引擎

RulesEngine的规则使用JSON进行存储,通过lambda表达式方式表述规则(Rules)。

安装很方便,直接使用nuget进行安装

规则定义

需要有Rules,有WorkflowName,然后还有一些属性。

除了标准的RuleExpressionType,还可以通过定义Rules嵌套多个条件,下面是Or逻辑。

示例

可以从官方的代码库中下载示例,定义了上述规则,就可以直接开始用了。示例描述了这么一个应用场景

根据不同的客户属性,提供不同的折扣。由于销售的情况变化较快,提供折扣的规则也需要经常变动。因此比较适用于规则引擎。

输入

输入一般来说是IEnumerable<dynamic>或者是匿名类型,上面实例展示的是由json反序列化形成的dynamic类型,对于程序生成的数据,使用匿名类型更加方便。

命名空间

和脚本引擎一样,默认规则引擎只能访问System的命名空间。如果需要使用到稍微复杂一些的类型,可以自己定义类型或者函数。比如定义一个这样的函数

需要使用的时候,先将类传递给RulesEngine

然后就可以直接在表达式中使用了。

规则参数

默认情况下,规则的输入使用的是类似input1 input2这样的形式,如果想直观一点,可以使用RuleParameter来进行封装具体的参数类型。

本地变量

如果表达式比较复杂的情况下,可以使用本地变量来进行分段处理,这对调试来说会比较方便。

本地变量的关键字为localParams,可以将中间的内容简单理解成var name = expression

总结

使用规则引擎,可以将经常变动的业务逻辑独立摘出来,为我们编写动态、可拓展的程序提供了很大的便利。RulesEngine这个东西提供的API也比较简洁,上手非常简单。

- EOF -

技术群:添加小编微信dotnet999

最新文章
英雄联盟技能提示怎么设置?
方法/步骤1/4进入游戏在电脑桌面打开LOL,进入到游戏界面。2/4进入游戏设置进入英雄联盟游戏大厅,点击右上角的进入游戏设置。3/4设置轨迹指示在设置界面选择热键,点击第一个选项,用带指示器的快捷施法替代快捷施法这个选项。4/4取快捷施
百度教育用AI黑科技为高考生家长送“清凉”
今日上午9时,一年一度的高考大戏正式上演。数据显示,今年全国有940万考生参考,北京地区共设92个考点,1791个考场,预计6万余人参加高考。与往年一样,除了直接参与“战斗”的高考考生,“望子成龙心切”的陪考大军也是每个考点周边必不
线上赏樱花5分钟教你用Python:画一棵漂亮的樱花树(附代码)
如果觉得不过瘾,先想自己亲自做樱花效果,那么赶紧来看了,各式各样的樱花效果树,领域IT界樱花盛景,下面就分享一下好看好玩的樱花效果树代码,这些大多都是运用python中的海龟画图来实现出来的效果
【整站源码+每天自动采集】羊毛部落赚客资讯类网站源码/无人值守采集/养站站群专用
【整站源码+每天自动采集】羊毛部落赚客资讯类网站源码/无人值守采集/养站站群专用源码介绍薅羊毛资讯博客自动采集站源码,wordpress后台前后端均为响应式布局方便管理,支持用户注册科投稿。1、内置大量文章,安装后即可运营省时省力;2、
网络推广工具种类有哪些
网络推广工具种类繁多,可以根据推广目标和策略选择适合的工具。以下是一些常见的网络推广工具类别:1. 社交媒体管理工具: - 用于管理和优化社交媒体平台上的内容和广告。例如,Buffer、Hootsuite、Sprout Social。2. 搜索引擎优化工具(S
排列五开奖结果第2021327期 一等奖中出189注
  每天晚上20点30分,一起来和我关注体彩排列五开奖结果。今天是2021年12月07日,中国体育彩票排列三第2021327期开奖号码如下。排列五作为排列三的延伸,堪称排列三的老大哥,只有一个奖级设置,奖金高达10万元,故而深得彩民朋友的热爱
福建网站排名优化费用是如何计算的?
福建网站seo优化百度搜索引擎关键词快速排名推广提升自然流量点击SEO优化师、网站设计师、梦想者您的流量获取专家“创新互联”成立于2013年,是一家注重效果与用户体验的运营公司,创立至今为500多家企业提供了针对于网站的搜索引擎优化方
短网址生成器:提升链接分享与搜索引擎索引效率的利器
在日常生活和工作中,我们经常需要分享和传递链接,无论是在社交媒体上发布内容、发送电子邮件还是在广告宣传中,链接的长度往往是一个挑战,特别是对于一些复杂的、包含多个参数的链接来说。长长的链接不仅不美观,还可能被截断或错误地复
用AI绘画技术生成高清美女写真,轻松成为数字艺术大师!
在数字时代,生成艺术品的方式正在悄然改变。你是否曾梦想拥有自己理想的美女写真?而如今,借助人工智能技术,我们不仅可以实现这样的愿望,还能让生成过程变得轻松而有趣。那么,如何通过AI生成超逼真的美女写真呢?本文将带你探索这场科
震惊科技圈!他被发现死在家中,年仅26岁
点击上方蓝字,再点服务,点击听广播!今天(12月14日)北京时间12月14日旧金山首席法医办公室称曾在OpenAI工作近四年的前员工Suchir Balaji最近被发现死在他位于旧金山的公寓中旧金山首席法医办公室执行主任David Serrano Sewell周五已在
相关文章
推荐文章
发表评论
0评