我目前正在寻找一个在.NET中可用的规则引擎。我们的逻辑相当简单,包括加、减、乘、除、与、或以及基本的运算优先级等内容。但我们需要将这些信息存储在数据库中,并在从数据库中获取新版本时生成规则文件。因此,通常的UI编辑器对我们来说将毫无用处,除非其中一个具有Web版UI编辑器。
因此,我的问题是,在我所说的情况下,哪种规则引擎在编程配置和与ASP.NET集成方面最好适合我们。
我目前正在寻找一个在.NET中可用的规则引擎。我们的逻辑相当简单,包括加、减、乘、除、与、或以及基本的运算优先级等内容。但我们需要将这些信息存储在数据库中,并在从数据库中获取新版本时生成规则文件。因此,通常的UI编辑器对我们来说将毫无用处,除非其中一个具有Web版UI编辑器。
因此,我的问题是,在我所说的情况下,哪种规则引擎在编程配置和与ASP.NET集成方面最好适合我们。
我对WWF的经验非常不好。它非常适合开发已知的流程(例如“此文档发送给某人的经理,然后发送给HR,如果无效则退回给提交者”),但如果你需要动态配置,它会变得非常棘手。正如你所看到的,我们尝试将其用于完全可配置的系统,这是BizTalk真正擅长的,但微软似乎不愿意让开发人员以如此低廉的价格替换BizTalk。
我们还考虑使用Acumen规则引擎和工具,看起来非常适合我们所需的,但我们从未抽出时间删除WWF并将其替换。
我强烈建议,如果您的规则相对简单,那么要么使用您拥有源代码的规则引擎,要么自己编写。 Justin Etheredge撰写了一份关于使用Domain-Driven Designs(Evans)中确定的模式通过自定义规则进行域验证的两篇文章(第一部分)和(第二部分)。
我在当前项目中实现了类似的系统,遵循相同的指南,并将规则序列化/反序列化到数据库中。我将不得不看一下Drools.NET。
事实是,BizTalk不容易被WWF所取代。它们之间的目标非常不同,Drools与BizTalk进行比较,而不是与WWF进行比较。原因是两者都使用相同的算法(rete)!
现在,使用Drools是另一回事,BizTalk也可以作为ESB运行,但Drools能做到吗?