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

     

  • 相关阅读:
    C++ —— IO流
    【批处理DOS-CMD命令-汇总和小结】-cmd的内部命令和外部命令怎么区分,CMD命令和运行(win+r)命令的区别,
    数据结构与算法(二)树形结构篇
    1543_AURIX_TC275_CPU子系统_CPU内核实现特性
    131个经典面试题目+答案
    AUTOSAR CAN主动与被动唤醒分析
    Three光线投射实例
    《Effective C++》条款17
    Python 框架学习 Django篇 (三) 链接数据库
    【RabbitMQ】消息队列需要解决的几个问题
  • 原文地址:https://blog.csdn.net/zhanglong_longlong/article/details/125404932