4

我是业务规则领域的新手,但我想我已经理解 Drools Expert 和 Drools Guvnor 的概念,但与 Expert 相比,我仍然有点困惑如何/何时/为什么使用 Guvnor。而且,他们是否相互排斥或有能力甚至更喜欢并肩工作。以下是一些令人困惑的突出主题和我的担忧背后的一些解释,主要集中在应用程序的可维护性上。

Guvnor 是否具有 Expert 中可用的所有功能以及更多功能?

我知道 Guvnor 是业务规则管理系统 (BRMS),它控制存储(包括版本控制)规则并将服务公开给其他应用程序使用。Guvnor 包含用于生成规则的 UI(文本和图形)和用于运行它们的引擎,因此从这个意义上说,我猜它包含专家系统的所有功能。根据我的要求,我很确定 Guvnor 是我所需要的,但是在那之后我需要 Drools Expert 吗?

或者换句话说,Drools Expert 是否提供了 Guvnor 中没有的东西?

Guvnor 中的测试规则

我看到的许多 Drools 教程都是从 TDD 示例开始的,其中使用简单的 jUnit 测试来测试规则。一旦规则被导入到 Guvnor(或只是在那里生成),有没有办法为它使用/编写单元测试?

测试是否应该仅通过公开接口 (REST) 进行?

如果系统的用户要制定自己的规则,我不希望他们编写任何测试。主要对“核心”规则及其可维护性感兴趣。

如果是“核心”规则,它们是否应该存储在版本控制系统中并在整个系统的预定更新时导入到 Guvnor?在这种情况下,可以为这些规则编写单元测试,并作为构建周期的一部分自动执行。

提前致谢。

4

1 回答 1

9

根据您的一个问题,我应该先澄清一些事情。在本质上:

  • 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。

于 2012-12-14T10:54:51.480 回答