推广 热搜: 关键词  效果  自动  数据  直播  应用  信息  设置  提升  哪些 

C#规则引擎RulesEngine

   日期:2024-12-27     作者:d5zu8    caijiyuan  
核心提示:当编写应用程序时,经常性需要花费大量的时间与精力处理业务逻辑,往往业务逻辑的变化需要重构或者增加大量代码

C#规则引擎RulesEngine

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

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

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

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

输入输出类型数量比较固定,但是执行逻辑经常变化
switch条件经常变化,复杂switch语句的替代
会变动的,具有多种条件或者规则的业务逻辑
规则自由度不要求特别高的场景。(这种情况建议使用脚本引擎
RulesEngine的规则使用JSON进行存储,通过lambda表达式方式表述规则(Rules)。

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

 

规则定义#
需要有Rules,有WorkflowName,然后还有一些属性。

 

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

 

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

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

 

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

 

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

 

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

 

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

 

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

 

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

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

 

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

作者: 波多尔斯基

本文地址:https://sicmodule.kub2b.com/tnews/5463.html     企库往 https://sicmodule.kub2b.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。

 
 
更多>同类生活信息

文章列表
相关文章
最新动态
推荐图文
生活信息
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号