`
何必如此
  • 浏览: 55412 次
社区版块
存档分类
最新评论

规则引擎Visual Rules Solution开发基础教程【连载24】-- 使用VisualRules规则引擎实现业务逻辑

阅读更多
使用VisualRules规则引擎实现业务逻辑


        使用规则引擎可以通过降低实现复杂业务逻辑的组件的复杂性,降低应用程序的维护和可扩展性成本。这篇文章展示如何使用VisualRules规则引擎让 Java™ 应用程序更适应变化。VisualRules有一个本地规则表达式语言和一个规则编辑器插件,使 VisualRules的应用更加简单快捷

        要求施加在当今软件产品上的大多数复杂性是行为和功能方面的,从而导致组件实现具有复杂的业务逻辑。实现 J2EE 或 J2SE 应用程序中业务逻辑最常见的方法是编写 Java 代码来实现需求文档的规则和逻辑。在大多数情况下,该代码的错综复杂性使得维护和更新应用程序的业务逻辑成为一项令人畏惧的任务,甚至对于经验丰富的开发人员来说也是如此。任何更改,不管多么简单,仍然会产生重编译和重部署成本。

        规则引擎试图解决(或者至少降低)应用程序业务逻辑的开发和维护中固有的问题和困难。可以将规则引擎看作实现复杂业务逻辑的框架。大多数规则引擎允许您使用声明性编程来表达对于某些给定信息或知识有效的结果。您可以专注于已知为真的事实及其结果,也就是应用程序的业务逻辑。

        有多个规则引擎可供使用,其中包括商业和开放源码选择。商业规则引擎通常允许使用专用的类似英语的语言来表达规则。其他规则引擎允许使用脚本语言(比如 Groovy 或 Python)编写规则。本文为您介绍 VisualRules规则引擎,并使用示例程序帮助您理解如何使用 VisualRules作为 Java 应用程序中业务逻辑层的一部分。


一、VisualRules版本及特点描述

       VisualRules是用 Java 语言编写的商业规则引擎。VisualRules允许使用声明方式表达业务逻辑。可以使用独有的本地语言编写规则,从而便于学习和理解。并且,还可以将 Java 代码直接嵌入到规则文件中,这令 VisualRules的学习更加吸引人。VisualRules还具有其他优点:
       • 非常健全的技术支持
       • 易用
       • 快速的执行速度
       • 规则编译为Java代码,跨平台
       • 超过10年的专注研发投入
       • 商业化的售后服务,使产生问题得到更好的处理


二、设置虚拟场景

下列假设为应用程序解决的虚构问题设置了场景:
       • 名为 XYZ 的公司构建两种类型的计算机机器:Type1 和 Type2。机器类型按其架构定义。
       • XYZ 计算机可以提供多种功能。当前定义了四种功能:DDNS Server、DNS Server、Gateway 和 Router。
       • 在发运每台机器之前,XYZ 在其上执行多个测试。
       • 在每台机器上执行的测试取决于每台机器的类型和功能。目前,定义了五种测试:Test1、Test2、Test3、Test4 和 Test5。
       • 当将测试分配给一台计算机时,也将测试到期日期 分配给该机器。分配给计算机的测试不能晚于该到期日期执行。到期日期值取决于分配给机器的测试。
       • XYZ 使用可以确定机器类型和功能的内部开发的软件应用程序,自动化了执行测试时的大部分过程。然后,基于这些属性,应用程序确定要执行的测试及其到期日期。
       • 目前,为计算机分配测试和测试到期日期的逻辑是该应用程序的已编译代码的一部分。包含该逻辑的组件用 Java 语言编写。
       • 分配测试和到期日期的逻辑一个月更改多次。当开发人员需要使用 Java 代码实现该逻辑时,必须经历一个冗长乏味的过程。
       因为在对为计算机分配测试和到期日期的逻辑进行更改时,公司会发生高额成本,所以XYZ 主管已经要求软件工程师寻找一种灵活的方法,用最少的代价将对业务规则的更改 “推” 至生产环境。于是VisualRules走上舞台了。工程师决定,如果它们使用规则引擎来表达确定哪些测试应该执行的规则,则可以节省更多时间和精力。他们将只需要更改规则文件的内容,然后在生产环境中替换该文件。对于他们来说,这比更改已编译代码并在将已编译代码部署到生产环境中时进行由组织强制的冗长过程要简单省时得多。
       目前,在为机器分配测试和到期日期时必须遵循以下业务规则:
       • 如果计算机是 Type1,则只能在其上执行 Test1、Test2 和 Test5。
       • 如果计算机是 Type2 且其中一个功能为 DNS Server,则应执行 Test4 和 Test5。
       • 如果计算机是 Type2 且其中一个功能为 DDNS Server,则应执行 Test2 和 Test3。
       • 如果计算机是 Type2 且其中一个功能为 Gateway,则应执行 Test3 和 Test4。
       • 如果计算机是 Type2 且其中一个功能为 Router,则应执行 Test1 和 Test3。
       • 如果 Test1 是要在计算机上执行的测试之一,则测试到期日期距离机器的创建日期 3 天。该规则优先于测试到期日期的所有下列规则。
       • 如果 Test2 是要在计算机上执行的测试之一,则测试到期日期距离机器的创建日期 7 天。该规则优先于测试到期日期的所有下列规则。
       • 如果 Test3 是要在计算机上执行的测试之一,则测试到期日期距离机器的创建日期 10 天。该规则优先于测试到期日期的所有下列规则。
       • 如果 Test4 是要在计算机上执行的测试之一,则测试到期日期距离机器的创建日期 12 天。该规则优先于测试到期日期的所有下列规则。
       • 如果 Test5 是要在计算机上执行的测试之一,则测试到期日期距离机器的创建日期 14 天。
       捕获为机器分配测试和测试到期日期的上述业务规则的当前 Java 代码如下所示:


三、使用Java代码实现业务逻辑

使用 if-else 语句实现业务规则逻辑
Machine machine = ...
                        // Assign tests
                        Collections.sort(machine.getFunctions());
                        int index;
                        if (machine.getType().equals("Type1")) {
                        Test test1 = ...
                        Test test2 = ...
                        Test test5 = ...
                        machine.getTests().add(test1);
                        machine.getTests().add(test2);
                        machine.getTests().add(test5);
                        } else if (machine.getType().equals("Type2")){
index = Collections.binarySearch(machine.getFunctions(), "Router");
                        if (index >= 0) {
                        Test test1 = ...
                        Test test3 = ...
                        machine.getTests().add(test1);
                        machine.getTests().add(test3);
                        }
                        index = Collections.binarySearch(machine.getFunctions(), "Gateway");
                        if (index >= 0) {
                        Test test4 = ...
                        Test test3 = ...
                        machine.getTests().add(test4);
                        machine.getTests().add(test3);
                        }
                        ...
                        }
                        // Assign tests due date
                        Collections.sort(machine.getTests(), new TestComparator());
                        ...
                        Test test1 = ...
                        index = Collections.binarySearch(machine.getTests(), test1);
                        if (index >= 0) {
                        // Set due date to 3 days after Machine was created
                        Timestamp creationTs = machine.getCreationTs();
                        machine.setTestsDueTime(...);
                        return;
                        }
                        index = Collections.binarySearch(machine.getTests(), test2);
                        if (index >= 0) {
                        // Set due date to 7 days after Machine was created
                        Timestamp creationTs = machine.getCreationTs();
                        machine.setTestsDueTime(...);
                        return;
                        }
                        ...

       上述所示代码不是太复杂,但也并不简单。如果要对其进行更改,需要十分小心。一堆互相缠绕的 if-else 语句正试图捕获已经为应用程序标识的业务逻辑。如果您对业务规则不甚了解,就无法一眼看出代码的意图。
       使用VisualRules规则配置的方式表示上述定义的业务规则。它包含以下内容:
       1. VisualRules规则配置器。
       2. JDk1.6
       3. Tomcat5
       4. VisualRules核心引擎
       如图所示:

       1. VisualRules规则配置器





       JDK,Tomcat,核心引擎将不做展示,使用即可
       2.创建规则工程





       打开规则配置器,点文件菜单,选择新建规则工程,工程名为:机器功能测试,存放路径可自由选择
       规则工程创建完成后,我们再为当前场景创建一个规则包,在规则工程上面点右键,选择:新建规则包,并命名为test。





       在规则包创建完成后,我们再把规则对象添加到该规则包的对象库中。




       对象添加完成后,我们就可以来配置业务规则了。





       如上图所示:我们按照测试项目的优先级来配置规则,一共有5个测试项目。
       在规则配置完成以后,按照业务逻辑可以在规则中进行单元测试,例如:我们设定计算机为:type2,测试功能为:DDNS Server,机器创建日期为:2013-05-14,那么在规则执行完成后,我们可以得到如下的测试结果。





       从测试的结果可以看出:
       针对type2这台机器我们需要进行2个测试
       1:在2013-05-07对它进行test2测试
       2:在2013-05-04对它进行test3测试

       VisualRules规则文件
       如上面我们看到的规则配置,VisualRules规则文件可以包含一个或多个规则集或者规则。每个规则集或者规则中又可以包含一条或多条规则。
       结束语
       使用规则引擎可以显著降低实现 Java 应用程序中业务规则逻辑的组件的复杂性。使用规则引擎以声明方法表达规则的应用程序比其他应用程序更容易维护和扩展。正如您所看到的,VisualRules是一种功能强大的灵活的规则引擎产品。使用VisualRules的特性和能力,您可以灵活的配置应用程序的复杂业务逻辑。VisualRules采用中文化的规则配置方式使得学习和使用VisualRules规则引擎产品对业务人员来说变得相当容易。

  • 大小: 117.1 KB
  • 大小: 39.4 KB
  • 大小: 35.1 KB
  • 大小: 21.3 KB
  • 大小: 22.1 KB
  • 大小: 10.6 KB
0
8
分享到:
评论

相关推荐

    Visual-Rules规则引擎产品介绍-PPT课件.ppt

    综上所述,Visual Rules规则引擎是一款针对中国市场的专业解决方案,它将业务规则管理与优化相结合,提供便捷的规则编辑、高效的执行机制和全面的管理功能,旨在帮助企业快速适应市场变化,提升业务决策的准确性和...

    规则引擎-决策池

    在描述中提到的Visual Rules Solution旗正规则引擎中,决策池扮演了这样的角色。 1. **决策池功能介绍** 决策池的设计目标是提高规则的复用性和效率。在规则开发中,如果某些规则被频繁使用,将这些规则放入决策池...

    VisualRules的电信业务支撑系统的开发

    ### VisualRules在电信业务支撑系统开发中的应用 #### 一、引言 随着信息技术的不断发展,电信行业面临着越来越复杂的业务需求和技术挑战。为了更好地适应市场变化、提高服务质量、降低成本,电信运营商需要构建...

    规则引擎-规则测试和轨迹跟踪

    以Visual Rules Solution为例,开发者可以直观地创建并命名规则包,如“测试与轨迹”。 - 变量定义:规则包中通常需要定义变量来存储和操作数据。变量定义清晰且适应性强,是确保规则正确运行的基础。 - 逻辑编写...

    规则引擎-数据库对象

    规则引擎是一种软件系统,它允许用户定义和执行...通过Visual Rules Solution的旗正规则引擎,我们可以构建出强大的业务规则系统,实现部门信息的动态管理和控制,同时避免了传统编程方式中大量的重复代码和复杂性。

    规则引擎-版本控制

    下面将详细讨论规则引擎的版本控制以及如何在Visual Rules Solution的旗正规则引擎中实现这一功能。 首先,版本控制是规则引擎的一个重要特性。当业务规则不断迭代和更新时,传统的做法是直接修改代码,这可能导致...

    规则引擎-变量跟踪

    在Visual Rules Solution这款规则引擎中,变量跟踪功能能够帮助用户深入了解规则执行的细节,尤其是在处理复杂的业务逻辑时。当我们在规则包测试中启用变量跟踪,可以观察到变量在每个规则执行前后以及规则集内的值...

    规则引擎教程-决策树.docx

    【规则引擎教程-决策树】 规则引擎是一种软件系统,它允许业务规则以一种结构化、可维护的方式独立于应用程序代码进行管理和执行。在本教程中,我们将重点介绍Visual Rules Solution的决策树功能,这是一种强大的...

    规则引擎-规则对象分类

    Visual Rules Solution提供了内置的测试工具,可以模拟不同的输入并观察输出结果,确保规则满足预期的业务逻辑。 通过以上步骤,我们可以创建一个结构化的规则引擎解决方案,有效地管理规则对象,提高规则的可读性...

    规则引擎-调试与日志文件

    旗正规则引擎,即Visual Rules Solution,提供了一种用户友好的界面来创建、调试和管理规则包。以下将详细介绍规则引擎中的调试与日志功能。 1. **功能介绍** 规则引擎在测试阶段,调试功能至关重要,它允许开发者...

    规则引擎-FTP上传

    在Visual Rules Solution的旗正规则引擎中,FTP上传的功能提供了以下步骤来实现这一过程: 1. **功能介绍**:FTP上传允许用户将完成的规则包和jsp页面存储在服务器的数据库中,供其他用户访问。当需要包含所有相关...

    规则引擎-Excel操作

    1. 创建规则工程对象库:首先,启动Visual Rules Solution,然后通过文件菜单创建一个新的规则工程,命名为“对象库”。这将作为所有规则和相关对象的容器。 2. 新建规则包:在“对象库”工程中,创建一个新的规则...

    Microsoft Visual C++ 2013 Redistributable(X64) - 12.0.40660

    *************************************************************...Microsoft Visual C++ 2013 Redistributable(X64) - 12.0.40660 需先安装这个才行 *************************************************************

    规则引擎-Java调用规则

    规则引擎在现代软件系统中扮演着重要角色,它允许业务逻辑与核心应用程序代码分离,使得规则可以在不修改源代码的情况下进行调整和更新。本篇主要介绍如何在Java环境中调用规则引擎,具体包括三种方法:Java类直接...

    Visual Studio 2019 中文使用教程

    Visual Studio 2019中文使用教程涵盖了Visual Studio 2019开发环境使用方面的大量知识点,特别针对C++开发者。以下是根据提供的文件信息整理出的详细知识点: 1. Visual Studio项目和生成系统 - Visual Studio项目...

    规则引擎-XML操作

    在这个场景中,我们探讨了如何利用规则引擎,特别是Visual Rules Solution的旗正规则引擎,来操作XML数据,将表格数据转换为XML文件。XML(Extensible Markup Language)是一种结构化数据存储和交换的标准,广泛应用...

    ST Visual Programmer STM32(en.stvp-stm32)最新4.0

    ST Visual Programmer STM32(en.stvp-stm32)最新4.0

    Visual-Basic基础语法-常规 Visual Basic 代码的词法规则指南

    Visual-Basic基础语法-常规 Visual Basic 代码的词法规则指南 Visual Basic 程序的编译首先涉及到将原始的 Unicode 字符流转换为有序的词法标记集。因为 Visual Basic 语言不是自由格式语言,标记集随后进一步划分为...

Global site tag (gtag.js) - Google Analytics