我是业务规则世界的新手,但我认为我已经理解了Drools Expert和Drools Guvnor的概念,但我仍然有点困惑如何/何时/为什么使用Guvnor与Expert相比较。而且,他们是否相互排斥或者是否有能力甚至更愿意并肩工作。下面是一些突出的主题,这些主题可以解释我的问题背后的一些解释,主要集中在应用程序可维护性上。
Guvnor是否拥有Expert中可用的所有功能以及更多功能?
我知道Guvnor是业务规则管理系统(BRMS),它控制存储(包括版本控制)规则和公开服务以使用其他应用程序。 Guvnor包含用于生成规则的UI(文本和图形)以及用于运行它们的引擎,因此从这个意义上讲,我猜它包含Expert系统的所有功能。根据我的要求,我很确定Guvnor是我需要的,但在此之后我还需要Drools Expert吗?
或者换句话说,Drools Expert是否提供Guvnor中没有的东西?
在Guvnor中测试规则
关于Drools的许多教程我已经看过TDD示例,其中规则使用简单的jUnit测试进行测试。一旦将规则导入Guvnor(或者只是在那里生成),有没有办法为它使用/编写单元测试?
是否应仅通过公开接口(REST)进行测试?
如果系统的用户要开发自己的规则,我不希望他们编写任何测试。主要关注“核心”规则及其可维护性。
如果是“核心”规则,它们是否应存储在版本控制系统中,并在整个系统的预定更新中导入Guvnor?在这种情况下,可以为这些规则编写单元测试,并在构建周期中自动执行。
提前致谢。
答案 0 :(得分:10)
根据您的一个问题,我应该首先清理一些问题。实质上:
除了测试工具所需的内容之外,Guvnor不会为您的规则提供运行时。您将始终需要Expert用于运行时环境。 Guvnor使您可以管理规则并存储它们。它还提供了一些方便的GUI工具,例如指导编辑器和Web决策表。但是,您也可以在IDE中编辑规则,例如Eclipse,并使用Guvnor WebDav Eclipse插件将它们推送到Guvnor。
通常,您将在一台服务器上安装Guvnor Web应用程序,在其他地方安装您的应用程序。您可以将Guvnor中编译的规则下载到您的应用程序构建中,并将其与您的应用程序一起部署。或者,您可以在代码中定义URL资源以创建知识库,指向Guvnor包URL。在这种情况下,您的应用程序可以在启动时加载知识库并在运行时重新加载它。
例如,以下代码将下载名为“Approved”的包快照作为构建知识库的资源。
UrlResource urlResource =
(UrlResource) ResourceFactory.newUrlResource(
"http://my.guvnor.local/.../package/mypackage/Approved");
urlResource.setBasicAuthentication("enabled");
urlResource.setUsername("myusername");
urlResource.setPassword("mypassword");
KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder();
builder.add(urlResource, resource.getType());
编辑 - 如果您希望在Guvnor中更改规则时在运行时重新加载规则,请查看KnowledgeAgent。
使用Guvnor的主要原因是使非技术用户能够使用决策表和基于DSL的指导编辑器编写规则。
我喜欢在Eclipse中编辑技术规则,在那里我可以轻松地围绕它们编写单元测试并评估它们的行为与我期望的一样。我发现这比Guvnor的测试功能要容易得多。虽然Guvnor提供了一些版本控制,但我更喜欢Subversion / Git作为我的技术规则的版本控制。
我还在Eclipse中编写DSL,然后将其部署到Guvnor。这使得指导规则对于非技术用户来说更加简单。
测试规则
关于测试,有几个选择。 Guvnor中有测试功能,可以根据各种输入编写期望值。但是,我个人觉得这种方式太笨重而且限制使用。我更喜欢用Java / JUnit编写测试。
首先,您可以编写简单的单元测试,加载一个或两个技术规则,用DRL编写并评估它们在您认为应该激活时激活,并在适当的时候生成推断的事实。
对于更复杂的测试,我编写测试,使用Guvnor中的包创建知识库,插入事实和消防规则,以评估整个包是否正常工作,包括那些内置的规则指导编辑或决策表。
Guvnor的其他用途
值得注意的是,Guvnor编辑器功能正变得越来越丰富,它正在成为一个编辑器和存储库,而不仅仅是规则。例如,BPM流程有丰富的工具,很快就会比Eclipse中的IDE更好。
<强>摘要强>
如果您的所有规则都是由您自己和DRL中的其他开发人员编写的,那么使用Guvnor几乎没有任何好处。事实上,我觉得这是一个障碍。但是,如果您希望利用指导编辑或决策表,或者您希望“业务”用户管理一些规则,那么您应该深入了解Guvnor。