从本质上讲,我已经进行了一项调查,人们回答的问题很像测试,
并且有不同的路径,到目前为止,这很容易,但是我想使其更具动态性,以便我可以有一条通用的规则来测试所有路径,以使评估程序更容易与当前的我一起使用只允许AND,而每个OR本质上都会成为集合中的另一个Rule,
QuestionID,然后我像这样形成了一系列AND规则
<rule id="1">
<true>
<question ID=123>
<question ID=124>
</true>
<false>
<question ID=127>
<question ID=128>
</false>
</rule>
<rule id="2"><true>
<question ID=123>
<question ID=125>
</true>
<false>
<question ID=127>
</false>
</rule>
该规则1表示,如果问题123和124回答为是,而问题127和128为否,则它们通过。 OR(规则2)是,如果123和125为true,而127为false,则它们也通过。
如果存在许多组合,这将变得很乏味,因此我想在逻辑中实现“或”,但我不确定该问题的最佳解决方案是什么。
我认为规则引擎太复杂了,必须有一种更简单的方法,也许像在LINQ中那样构造一个图,然后进行评估以查看它们是否通过,
谢谢!
-不是compsci专业。
最佳答案
这不必太复杂:您已经完成了大多数操作,因为您的and元素有效地实现了AND类型的规则。我将介绍一个可以容纳和元素的元素。
您将可以:
RuleBase类,带有“公共抽象布尔Evaluate()”方法
TrueRule,FalseRule和OrRule类,其中包含RuleBase对象的列表
一个QuestionRule类,它引用一个特定的问题
您将对每个方法实施Evaluate方法,如下所示:
TrueRule:仅当所有包含的规则从Evaluate返回true时才返回true
FalseRule:仅当所有包含的规则从Evaluate返回false时,才返回true
OrRule:如果包含的规则中的至少一项从“评估”返回true,则返回true
QuestionRule:返回原始问题的答案
该类层次结构实现了一个简单的抽象语法树(AST)。 LINQ以System.Expressions.Expression类的形式执行几乎相同的操作,但是如果不清楚如何将所有内容组合在一起,则编写自己的代码将很有帮助。
关于c# - boolean 逻辑规则评估器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/247779/