在评估了现成的产品(MSBRE,Drools等)之后,我们正在编写自己的规则引擎(已经做出了这个决定,请不要建议其他规则引擎 - 但是它们中的一部分会做具体细节我希望是最受欢迎的。)
我想要的是给用户一个简单的GUI,允许他们获取我们的域“对象”之一,并在GUI中制定一个可以转换为Xml或(理想情况下).net代码的规则。
因此,例如,用户可能会选择StaffDuty,并想说“如果工作人员在管理组中,今天的工作时间超过8小时,请确保明天的签到时间是在08:00之后”。 StaffDuty对象将具有Groups,DutyTime和NextDuty属性,NextDuty将是具有SignOn属性的类型。
我希望能够在某种程度上以图形方式显示用户“填写位”,然后将其保存,以便我们可以将其转换为代码(可能通过解释xml)。
我对这个解释相当开放,因为我想在此时不要排除任何更具体的内容。
任何想法都赞赏!
答案 0 :(得分:1)
查看Windows Workflow Foundation中规则引擎的规则和表达式设计器。它们都可以在Visual Studio之外进行托管。特别是,我看到了一个示例,其中规则设计器将给定类型作为其上下文传递,并且能够基于该类型的属性以及这些属性引用的类型的属性创建规则和表达式。实际上,可以在对象图的根处传递一个类型,然后引擎可以使用图中所有对象的属性。
答案 1 :(得分:0)
我前段时间做了一个大型政府商业规则引擎。
使用XML模式描述数据,我使用XML模式注释添加所有规则引擎特定位,确保模式保持有效。
GUI提供了一个传统的资源管理器样式视图,其中树视图显示了结构,右侧窗格显示了所选树节点的详细信息。
我使用了一些相当复杂的XSLT(带有一些自定义扩展)来生成一个小的XML文档,表示一个表单和一个小引擎,可以从该表单定义中动态呈现控件。
表单后面的代码更新了一个XML片段,然后由另一个XSLT将其转换回XML diffgram,并用于更新模式的内存中表示。
一旦构建了带注释的XML模式,编译器就会生成两个.NET程序集,一个包含模式的代码表示,另一个包含业务规则的实现。
这是一段相当复杂的代码,但是非常灵活和动态,绝大多数UI都可以通过XSLT自定义。实际上,一些用户需要不同的视图,这些视图完全通过包含XSLT的附加动态加载程序集来处理。
成本约为250万英镑并花了两年时间来开发,介意(整个过程,而不仅仅是UI)。在我28年的经营中,这一直是我最为自豪的发展!
如果你愿意,可以继续讨论。