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

     亲爱的朋友们,今天我要和大家探讨一款强大的业务规则库——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应用来实现快速上手。

它是如何工作的

104823c23d52c260aa42a16af8eb18ce.png

其他亮点

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

https://github.com/alexreich/RulesEngineEditor

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

结语

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值