我正在创建一个界面,用户可以在其中在运行时从特定于域的对象构建自己的业务规则,将这些规则保存在数据库中,然后由应用程序使用。其中一些是复杂的谓词,而另一些则需要在看起来相当复杂的关系中组合域对象。到目前为止,我已经研究了 GoF、eval 的动态和 CodeDom。有人对应该使用什么有建议吗?
4 回答
实际上,您可以只使用 WF 规则引擎 API 开发您的应用程序,而无需使用 WF。http://blogs.microsoft.co.il/blogs/bursteg/archive/2007/08/09/WF-Rules-Engine-without-Workflow.aspx这将为您节省大量工作。
Kaizen,根据您的动态规则的范围和类型,您最终可以使用工作流引擎,例如 MS WF 将规则定义为工作流活动......这样您就可以隔离逻辑并且不需要完全重建当您需要更改工作流程中的任何内容时应用程序。
这可能不是最好的解决方案,但可能是替代方案......
花了一年时间构建规则引擎并在方法上进行斗争,我可以告诉你这并不容易。尤其是当你专注于你的目标时。如果要让用户为系统编写规则,你真的需要专注于那个领域。对于大多数业务用户来说,对开发人员来说容易的事情可能要困难得多。我们在 Excel 中构建了一个规则编写平台,该平台编译为 C# 并动态运行……问题是用户发现电子表格和逻辑流程过于复杂,并聘请了 ASp.NET 承包商来构建规则。
BizTalk 有一个引擎,我相信它可以用于 .NET 应用程序 http://www.microsoft.com/biztalk/en/us/business-rule-framework.aspx
玩得开心!
规则多久更改一次?构建一个让业务构建(和版本化)他们自己的规则的系统比构建一个让程序员动态更新规则的系统更具挑战性。
当过去的项目中出现类似的要求时,业务部门承认虽然是,但规则会改变;他们不会经常更改,以至于必须由他们进行更新。我们最终将 IronPython 用于动态部分并将代码存储在数据库中,系统将在加载时提取适当的规则。该应用程序的其余部分是用 C# 编写的。对我们和企业来说都是一场胜利。