• .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. }

     

  • 相关阅读:
    Redis(八)【发布与订阅】
    MATLAB画图由于线段太多导致导出图片模糊的解决办法
    Java线程的实现
    3. 吴恩达深度学习--初始化、正则化、梯度校验
    基于YOLO的自动驾驶目标检测研究综述
    python学习笔记——序列
    X64汇编语言指令编码
    vscode 连接ubuntu git下载缓慢
    Python子进程管理与进程信息获取
    JAVA仓库管理系统(附源码+调试)
  • 原文地址:https://blog.csdn.net/zhanglong_longlong/article/details/125404932