根据您的一个问题,我应该先澄清一些事情。在本质上:
- Expert 是一个规则引擎运行时。
- Guvnor 是用于编写和存储规则的工具,随后将在 Expert 中执行。
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。