• .NET RulesEngine(规则引擎)


    RulesEngine 概述
    RulesEngine是Microsoft推出的一个规则引擎项目,用于系统中抽象出的业务逻辑/规则/策略。在我们开发的过程中,避免不了的是跟这种反反复复的业务逻辑进行处理,而对于这种动态的规则来说的话,它是比较优雅的一种方式,使用我们减少了对我们代码或者说项目的修改。


    属性    描述
    RuleName    规则名称
    Properties    规则属性,获取或设置规则的自定义属性或者标记
    Operator    操作符
    ErrorMessage    错误消息
    Enabled    获取和设置规则是否已启用
    RuleExpressionType    规则表达式类型,默认为LambdaExpression,当然目前只有这么一个
    WorkflowRulesToInJect    注入工作流程规则
    Rules    规则
    LocalParams    本地参数
    Expression    表达树
    Actions    
    SuccessEvent    完成事件,默认为规则名称
     

    nugit引用RulesEngine

    1. using Newtonsoft.Json;
    2. using RulesEngine.Models;
    3. using System;
    4. using System.Collections.Generic;
    5. namespace Rules
    6. {
    7. internal class Program
    8. {
    9. static void Main(string[] args)
    10. {
    11. // 定义规则
    12. var rulesStr = @"[{
    13. ""WorkflowName"": ""UserInputWorkflow"",
    14. ""Rules"": [
    15. {
    16. ""RuleName"": ""CheckAge"",
    17. ""ErrorMessage"": ""年龄必须大于18岁."",
    18. ""ErrorType"": ""Error"",
    19. ""RuleExpressionType"": ""LambdaExpression"",
    20. ""Expression"": ""Age > 18""
    21. },
    22. {
    23. ""RuleName"": ""CheckIDNoIsEmpty"",
    24. ""ErrorMessage"": ""身份证号不可以为空."",
    25. ""ErrorType"": ""Error"",
    26. ""RuleExpressionType"": ""LambdaExpression"",
    27. ""Expression"": ""IdNo != null""
    28. }
    29. ]
    30. }] ";
    31. var workflowRules = JsonConvert.DeserializeObject<List<WorkflowRules>>(rulesStr);
    32. var rulesEngine = new RulesEngine.RulesEngine(workflowRules.ToArray());
    33. var userInput = new UserInput
    34. {
    35. IdNo = null,
    36. Age = 18
    37. };
    38. List<RuleResultTree> resultList = rulesEngine.ExecuteAllRulesAsync("UserInputWorkflow", userInput).Result;
    39. foreach (var result in resultList)
    40. {
    41. Console.WriteLine("验证成功:{0},消息:{1}", result.IsSuccess, result.ExceptionMessage);
    42. }
    43. }
    44. }
    45. public class UserInput
    46. {
    47. public string IdNo { get; set; }
    48. public int Age { get; set; }
    49. }
    50. }

     

  • 相关阅读:
    java惠济区疫情期间监测管理系统计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    C++基础——对于C语言缺点的补充(1)
    java实现本地文件转文件流发送到前端
    Kubernetes:(十)K8s的亲和、反亲和、污点、容忍
    events_statements_summary_by_digest 未正常记录分类sql
    软件项目管理 6.3.用例点估算法
    东华大学 2022 oj c++ 无超纲写法 素数表
    TCP常见问题
    NISP是什么?
    独家 | 是时候和pd.read_csv(), pd.to_csv()说再见了
  • 原文地址:https://blog.csdn.net/zhanglong_longlong/article/details/125404932