6

我经常需要实现某种用户可编辑的规则系统——需求通常不同,以至于同一个系统不能直接适用,所以我经常遇到同样的问题——我如何设计一个规则系统那

  1. 是可维护的
  2. 恰当地平衡表现力和易用性
  3. 很容易扩展(如果/当我得到(2)错误时)。

我认为规则系统/DSL 非常有价值,但我对自己正确设计它们的能力感到不舒服。

您必须提供哪些参考/提示可以帮助简化此操作?
由于我遇到的问题的性质,现有语言通常不适用。(例如,您不需要普通计算机用户学习 python 来编写电子邮件过滤器。)类似地,规则语言,如JESS,只是部分解决方案,因为需要构建一些(更简单的)用户界面- 规则语言的顶部,以便非程序员可以使用它。该界面总是涉及删除某些功能,或者使这些功能更难使用,并且该过程会带来与上述相同的问题。

编辑:澄清一下,问题是关于设计规则引擎,我不是在寻找预先构建的规则引擎。如果您建议使用规则引擎,请解释它如何解决有关做出良好设计决策的问题。

4

5 回答 5

2

我们有这个工具的供应商的内部演示: http ://www.rulearts.com/rulexpress.php

作为一家公司,我们在规则引擎(例如 Cleverpath Aion)方面拥有丰富的经验,但主要是面向开发人员的工具。这个工具(rulexpress)非常面向商务人士。它不是规则引擎。但它可以输出 xml 中的所有数据(所以基本上是您喜欢的任何格式),然后我们会考虑将其作为真正规则引擎的输入,例如 Windows Workflow Foundation(不是更大/更好的规则引擎之一,但是仍然)。

该工具本身看起来相当不错,这是我在任何面向开发人员的工具中从未见过的一些东西。

还有一些围绕 WF 构建的规则管理工具,如果这是您选择的规则引擎,请查看 InRule。


在澄清原始问题后进行编辑:虽然我很久以前就涉足过这个(在 javacc 中编写了一点语言),但我现在认为这是一个糟糕的时间投资。我上面的评论是本着同样的精神:采用一个简单的规则引擎,一个简单的(商业)UI,使业务用户易于维护,并且只花时间将两者结合在一起。

于 2008-09-30T10:37:37.683 回答
1

我们很幸运:http: //msdn.microsoft.com/en-us/library/bb472424.aspx

于 2008-09-15T22:04:55.883 回答
0

First of all, normally it is not advised to let end-users define the rules. That's because they do not have development background and could simply write "code" that goes into infinite loop or does other weird things.

So either the system has to protect against that kind of behavior (thus, making it more complex), accept such possibility, or disallow end-users to do this.

If you are working with .NET then it is hideously easy to create your own DSL by extending the Boo compiler (i.e. with Rhino.DSL you can have simple DSL with one class).

于 2008-09-30T10:01:25.227 回答
0

要考虑的 Ruby 实现是 Ruleby ( http://ruleby.org/wiki/Ruleby )

于 2008-09-15T22:05:20.390 回答
0

我发现的一件事是能够将规则定义为表达式树使得实现变得如此简单。正如您正确提到的,项目之间的需求是如此不同,以至于您每次都必须重新实现。表达式树与访问者模式之类的东西相结合,构成了一个易于扩展的非常(没有双关语)表达性框架。而且您可以轻松地将一个非常动态的 GUI 放在满足您需求的那方面的表达式树之上。

希望这听起来不像我说的一切看起来都像我的锤子上的钉子,因为事实并非如此......只是根据我的经验,这已经派上用场不止一次了:-)

于 2008-09-15T22:07:55.860 回答