如何设计规则引擎?

Posted

技术标签:

【中文标题】如何设计规则引擎?【英文标题】:How to design a rule engine? 【发布时间】:2010-09-10 17:24:18 【问题描述】:

我应该在 C# 中创建一个简单的规则引擎。关于我如何继续进行的任何线索?它是一个简约的规则引擎,并将使用 SQL 服务器作为后端。我们是否有任何普遍适用于规则引擎的通用蓝图或设计模式?我可以使用哪种 .Net 技术来设计一种?任何方向都会有所帮助。 谢谢。

【问题讨论】:

【参考方案1】:

如果您使用的是 .NET 3.0 或更高版本,您 can use the Rules Engine of Windows Workflow Foundation 无需实际使用 Workflow。

我在一个项目上做过这个,你可以使用 SQL 或 XML 作为后端,效果很好。您可以使用 Workflow 示例附带的 IDE 并将其放入您自己的应用程序中。太棒了。

【讨论】:

【参考方案2】:

    考虑到有这么多可用的商业和开源代码,我不敢相信您会实施自己的代码。

    我建议将 InRule 视为价格合理的绝佳商业选择,或者将 NxBRE 视为开源空间。

【讨论】:

【参考方案3】:

你也可以试试 http://rulesengine.codeplex.com/

【讨论】:

【参考方案4】:

您在寻找什么样的规则引擎?对于造型实践?如果是这样,请查看StyleCop。不是答案,但可能已经有适合你的东西了。

【讨论】:

@Scott,我正在寻找使用 C# 开发业务规则引擎。像 inRule 什么的,但是一个非常简单的。我正在寻找模式或任何蓝图,据此我可以创建我的规则引擎。【参考方案5】:

您是否对方法有任何指示? (即,如果这是由课程材料补充的,您目前正在学习什么?)如果这是一个相当基本的系统,您可能会成功查看 Deterministic Finite State Machine 和 Nondeterministic Finite State Machine

【讨论】:

@jwarzech,它不适用于任何课程。这是一个业务规则引擎,应该是商业工作——但它相当简单。有几个通用类(10 个左右?)的规则。顺便说一句,我曾经在学校做过“计算理论”。谢谢你的回答。【参考方案6】:

如果您有业务分析师来编写高级规则引擎,那么可以 - 选择上述规则引擎之一或自行开发(包括工作流)。如果没有,那么只需在代码中编写您的业务逻辑,如果您需要聘请业务分析师并重做系统,那么您就是一个好地方。

【讨论】:

【参考方案7】:

如果您想编写类似这样的实现...

[TestMethod]
public void GreaterThanRule_WhenGreater_ResultsTrue()

    // ARRANGE
    int threshold = 5;
    int actual = 10;

    // ACT
    var integerRule = new IntegerGreaterThanRule();
    integerRule.Initialize(threshold, actual);

    var integerRuleEngine = new RuleEngine<int>();
    integerRuleEngine.Add(integerRule);
    var result = integerRuleEngine.MatchAll();

    // ASSERT
    Assert.IsTrue(result);

...或者这个...

[TestMethod]
public void GreaterThanRule_WhenGreater_ResultsTrue()

    // ARRANGE
    int threshold = 5;
    int actual = 10;

    // ACT
    var integerRule = new IntegerGreaterThanRule(threshold);

    var integerRuleEngine = new RuleEngine<int>();
    integerRuleEngine.ActualValue = actual;
    integerRuleEngine.Add(integerRule);

    // Get the result
    var result = integerRuleEngine.MatchAll();

    // ASSERT
    Assert.IsTrue(result);

【讨论】:

以上是关于如何设计规则引擎?的主要内容,如果未能解决你的问题,请参考以下文章

我可以从哪里开始学习规则引擎? [关闭]

c# 中的规则引擎设计和示例

规则引擎 设计模式

大厂通用的MySQL开发规范设计,包括“存储引擎字符集 命名规则等公共约定”,“表设计约定”,“字段设计约定”,“索引设计约定”,“SQL约定”,“开发人员行为约定”

Flink规则引擎实践分享

驰骋工作流引擎设计系列10时效考核规则设计