标签: rule-engine

如何实现规则引擎?

我有一个存储以下内容的db表:

RuleID  objectProperty ComparisonOperator  TargetValue
1       age            'greater_than'             15
2       username       'equal'             'some_name'
3       tags           'hasAtLeastOne'     'some_tag some_tag2'
Run Code Online (Sandbox Code Playgroud)

现在说我有这些规则的集合:

List<Rule> rules = db.GetRules();
Run Code Online (Sandbox Code Playgroud)

现在我还有一个用户的实例:

User user = db.GetUser(....);
Run Code Online (Sandbox Code Playgroud)

我将如何循环这些规则,并应用逻辑并执行比较等?

if(user.age > 15)

if(user.username == "some_name")
Run Code Online (Sandbox Code Playgroud)

由于对象的属性如'age'或'user_name'存储在表中,以及比较操作符'great_than'和'equal',我怎么可能这样做?

C#是一种静态类型语言,因此不确定如何继续前进.

c# rule-engine dynamic

197
推荐指数
6
解决办法
8万
查看次数

什么时候不应该使用规则引擎?

我有一个相当不错的使用规则引擎的优点列表,以及使用它们的一些原因,我需要的是你不应该使用规则引擎的原因列表

我到目前为止最好的是:

规则引擎并非真正用于处理工作流或流程执行,也不是用于执行规则的工作流引擎或流程管理工具.

你不应该使用它们的任何其他重要原因?

rule-engine

107
推荐指数
7
解决办法
11万
查看次数

在.NET中寻找简单的规则引擎库

有谁知道一个好的.NET库规则库(理想情况下是开源的)?我需要的东西,可以做嵌套的逻辑表达式,如(A和B)和(B或C或d).我需要对对象属性进行比较,例如A.P1和B.P1.(理想情况下,我可以比较任何属性 - A.P1和B.P2).

它应该将规则存储在数据库中(我有很多简单的可配置逻辑).它应该有一个规则创建/管理API.管理工具必须检查实例以确定哪些属性可用以及存在哪些约束.

谢谢!


哦,还有一件事.作为规则引擎,我需要包含Actions(Commands)的概念.这些是表达式返回时执行的操作:

If (expression.Evaluation) { actions.Execute(); }
Run Code Online (Sandbox Code Playgroud)

所以我看到一条规则如下:

class Rule
{
    Expression Exp;
    Actions[] Actions;
    Run() 
    { 
        if(Exp.Evaluate()) 
        { 
            foreach(action in Actions) 
            { 
                action.Execute(); 
            }
        } 
    }
}
Run Code Online (Sandbox Code Playgroud)

.net c# logic rule-engine .net-core

67
推荐指数
5
解决办法
4万
查看次数

规则引擎 - 优点和缺点

我正在审核一个使用所谓规则引擎的项目.简而言之,它是一种从应用程序代码中外部化业务逻辑的方法.

这个概念对我来说是全新的,我对此持怀疑态度.在听过人们谈论过去几年的贫血领域模型后,我正在质疑规则引擎方法.对我来说,它们似乎是一种弱域模型的好方法.例如,我说我正在做一个与规则引擎交互的java webapp.然后我决定我想要一个基于同一个域的Android应用程序.除非我希望Android应用程序也与规则引擎交互,否则我将不得不错过已编写的任何业务逻辑.

由于我对它们没有任何经验,只是好奇,我有兴趣了解使用规则引擎的优点和缺点?我能想到的唯一一个专业是你不需要重建你的整个应用程序只是为了改变一些业务规则(但实际上,有多少应用确实有那么多变化?).但是使用规则引擎来解决这个问题对我来说就像在霰弹枪伤口上放一个创可贴一样.

更新 - 自写这篇文章以来,上帝本人Martin Fowler一直在博客上谈论使用规则引擎.

rule-engine

67
推荐指数
7
解决办法
3万
查看次数

Javascript中的轻量级规则引擎

我正在寻找在Javascript中实现的轻量级规则引擎的建议.

这种实现的原因是使用一小组规则(少于20个)构建一个非常轻量但快速的基于浏览器的模拟.模拟将需要六个参数并运行规则并在浏览器中显示结果,而无需返回服务器.想象一下带有几个单选按钮,复选框,文本框和滑块的UI来控制参数.模拟将根据任何参数更改快速重新运行.

javascript rule-engine

48
推荐指数
3
解决办法
3万
查看次数

.Net规则引擎

我正在研究一个可以从规则引擎中受益的项目.我只考虑使用Windows工作流引擎,但我想知道还有什么.

我的项目花费了大部分预算.所以我需要建议价格适中(<$ 1,000范围内).

我看到了InRule,但他们没有发布价格(我可以看到).所以我猜它是其中之一"如果你不得不问你买不起它"的那种产品.

我看到这篇文章:在.NET中寻找简单的规则引擎库

但它很老,专注于开源.

那么,那里有任何价格适中的.Net规则引擎吗?

.net c# rule-engine

36
推荐指数
0
解决办法
4万
查看次数

在java中创建一个简单的规则引擎

我正在探索用Java创建简单业务规则引擎的不同方法.我需要向客户端提供一个简单的webapp,让他配置一堆规则.规则库的示例可能如下所示:

这是一个例子:

 IF (PATIENT_TYPE = "A" AND ADMISSION_TYPE="O")
 SEND TO OUTPATIENT
 ELSE IF PATIENT_TYPE = "B" 
 SEND TO INPATIENT
Run Code Online (Sandbox Code Playgroud)

规则引擎非常简单,最终操作可能只是两个操作中的一个,发送给住院病人或门诊病人.表达式中涉及的运算符可以是=,>,<,!=表达式之间的逻辑运算符AND, OR and NOT.

我想构建一个Web应用程序,用户将在一个小脚本中编写textarea,我会评估表达式 - 这样,业务规则用简单的英语解释,业务用户可以完全控制逻辑.

从我迄今为止所做的研究中,我遇到了,ANTLR并编写了自己的脚本语言作为解决此问题的可能选项.我没有探索像Drools规则引擎这样的选项,因为我觉得这可能是一种矫枉过正.你有解决这类问题的经验吗?如果是的话,你是怎么做到的?

java rule-engine business-rules

32
推荐指数
6
解决办法
7万
查看次数

我为什么要使用Drools?

我不是Drools专家.不过,我对它有一些熟悉,通过试验它.我无法理解,为什么我需要它.

我的典型应用是商业Web应用程序.是的,他们确实有一些规则.但这些是使用数据库表,SQL查询和一个很好的用户界面实现的,以便业务用户修改规则.规则不是任意的,它们在投入生产之前都经过仔细考虑.

我的商业用户永远不会使用(Drools)脚本语言来修改任何东西.单独修改规则.他们非常高兴使用UI屏幕来修改规则.另外,如果我让它们靠近它,它们可以在Drools文件中产生无数的语法错误.

再次
- 为什么我应该在这种情况下使用Drools?
- 我见过的Drools狂热分子坚持认为我应该改变我的所有代码以利用Drools.

那么,Drools有用吗?我不确定.

java scripting rule-engine rules drools

31
推荐指数
3
解决办法
2万
查看次数

NodeJS/Javascript中是否有任何规则引擎?

我需要一个轻量级的规则引擎.我们现在有大约50条规则,但规则经常变化.

我们可以使用Drools,但我觉得这样会有点过分.有没有更轻的F/OSS实现?

我知道其他类似的问题,但那是2岁,并没有一个好的答案.(我没有足够的代表对这个问题发表评论)

javascript rule-engine node.js

27
推荐指数
6
解决办法
2万
查看次数

管理复杂的Web表单

我在一个应用程序上工作,其核心是一组非常复杂的Web表单.这种复杂性的来源

  1. 缩放,一些表格包含大约50页,每页最多30个问题
  2. 复杂的规则,例如,如果用户对问题4回答"否",则问题5-15不适用,因此应从表格中删除

目前,我们对表单使用Angular Schema Form,但它没有提供一种在表单字段之间管理大量复杂规则的引人注目的方法.

我对基于规则的编程没有多少经验,但在我看来,这可能提供了一种更好的方法来管理表单字段之间的规则.例如,使用基于规则的方法,我们可以定义与每个表单字段关联的规则,规则引擎可以使用它们来决定下一个要显示的字段.使用我们当前的方法,我们通过大量的命令式JavaScript来实现这一点,这几乎是不可能测试和维护的.

如果有人有开发这种复杂网页表单的经验,我会有兴趣了解他们的经验,例如他们可以推荐的工具/库.我们当前的堆栈基于JDK(Java,Groovy,Grails)和JavaScript(Angular,Node),因此在这些平台上运行的工具/库/框架将特别令人感兴趣.

javascript forms rule-engine angular-schema-form

20
推荐指数
1
解决办法
582
查看次数