一种程序结构插件化方法及系统的制作方法

文档序号:6366399阅读:184来源:国知局
专利名称:一种程序结构插件化方法及系统的制作方法
技术领域
本发明涉及程序结构插件化方法,尤其涉及在spring开源框架下进行扩展的性能整合配置、优化程序开发/设计性能的技木,属于计算机领域。
背景技术
进入21世纪,随着计算机处理器的爆炸式增长,带来软件系统的诸多问题,如软件系统的复杂性等问题。面对不断变化的性能要求,通常的软件系统往往过于僵硬、脆弱、不易复用、维护困难。一方面,Java编程语言生逢其时(互联网的兴起),并且吸收总结了前人的经验教训,反映了最新技木,受到广泛的欢迎和采用。自1995年问世以来,其成功几乎任何编程语 言都无法媲美,其解决了程序开发过程中很多的问题。其中,spring开源框架,应用java面向对象的完美体现,综合运用面向对象语言的继承,多态和良好的封装性,使的系统的程序设计直接能够以插件的形式摆在开发者面前,为客户端程序员提供了良好的代码结构和业务流程设计。但是,已有的spring开源框架在使得系统程序结构插件化的技术上,还存在如下不足虽然极大的简化了客户端程序员对于复杂业务流程的程序的设计过程,但是它对事务的控制方面还有欠佳的表现,比如,对事务的控制主要是应用spring的配置型的事务控制,但是笔者认为这方面的功能有待于改进;又比如,主要是针对基于spring框架进行插件的配置,对于非spring项目,缺乏相关配置方法的说明(实际上,这个框架既是基于spring的,但又是可以脱离spring进行扩展)。从而导致了大型项目中,代码重复率高,设计混乱,结构不清晰,不统ー的问题。

发明内容
为克服现有技术的上述缺陷,本发明提供了一种程序结构插件化方法,其在浏览器/服务器B/S系统中,基于Spring框架的扩展,实现业务流程控制,其特征在于对整体的业务流程准确定位出业务处理阶段;对整体的业务流程进行细粒度的划分,分割成可以插拔式的功能模块的插件plugin ;根据业务流程的前后功能模块的关系,执行相应的控制模块,即全关系控制模块I IPluginSuite、与关系控制模块AndPluginSuite、互斥关系控制模块OrPluginSuite,完成功能模块的插件plugin执行控制,获得结果并返回。进ー步的,该业务流程的前后功能模块,称模块A、模块B,其关系为,(I)如果模块A执行成功,则执行模块B,如果模块A执行失败,则不执行模块B,为逻辑中的“与” And关系;(2)如果模块A执行成功,则不执行模块B,如果模块A执行不成功,则执行模块B,该关系是ー种或者模块A执行,或者模块B执行的互斥关系,为逻辑中的“互斥” Or关系;(3)不管模块A执行与否,都执行模块B,即模块A与模块B没有关系、但有先后的执行顺序,为“全” Al I关系。进ー步的,全关系控制模块AllPluginSuite、与关系控制模块AndPluginSuite、互斥关系控制模块OrPluginSuite,依次对应所述全关系All、与关系And、互斥关系Or。进ー步的,当功能模块的插件plugin处于全关系时,执行全关系控制模块AllPluginSuite :在spring配置文件中配置模块属性包含的插件plugin ;接着,执行控制方法,初始化变量;进ー步判断变量是否小于模块大小;当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,返回到判断步骤,反复循环,直到变量小于模块大小不成立,判断结果为假,结束该控制流程。进ー步的,当功能模块的插件plugin处于与关系时,执行与关系控制模块AndPluginSuite :用spring配置的xml文件初始化模块Module的属性,添加vassp的子类到模块Module中;接着,执行控制方法,初始化变量;进ー步判断变量是否小于模块大小;当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,将结果赋值;然后判断赋值后的执行结果是否为真,如果为真则返回到判断变量是否小于模块大小的步骤,反复循环,直到变量小于模块大小不成立即为假、或者判断复制后的执行结果为假,则结束该控制流程。进一步的,当功能ホ旲块的摘件plugin处于互斥关系时,执行互斥关系控制ホ旲块 OrPluginSuite :用spring配置的xml文件初始化模块Module的属性,添加vassp的子类到模块Module中;接着,执行控制方法,初始化变量;进ー步判断变量是否小于模块大小;当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,将结果赋值;然后判断赋值后的执行结果是否为真,如果为真,则结束该控制流程;如果判断赋值后的执行结果为假,则返回到判断变量是否小于模块大小的步骤,反复循环,直到变量小于模块大小为假,则结束该控制流程。另ー方面,本发明提供一种程序结构插件化方法,其在浏览器/服务器B/S系统中,基于Spring框架的扩展,实现业务流程控制,其特征在于接受用户请求,初始化请求;判断容器类中是否有功能实现类,如果有,则执行该类的控制方法,并将环境变量和javaBean放入环境和服务运行Bean中,返回到判断步骤,并将所有执行结果放到响应中;反复循环后,当判断容器类中没有功能实现类时,则结束控制流程。进ー步的,容器类包括全关系容器类、与关系容器类、互斥关系容器类,完成功能模块的插件plugin控制。进ー步的,当功能模块的插件plugin处于全关系时,执行全关系容器类在spring配置文件中配置模块属性包含的插件plugin ;接着,执行控制方法,初始化变量;进一歩判断变量是否小于模块大小;当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,返回到判断步骤,反复循环,直到变量小于模块大小不成立,判断结果为假,结束该控制流程。进ー步的,当功能模块的插件plugin处于与关系时,执行与关系容器类用spring配置的xml文件初始化模块Module的属性,添加vassp的子类到模块Module中;接着,执行控制方法,初始化变量;进ー步判断变量是否小于模块大小;当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,将结果赋值;然后判断赋值后的执行结果是否为真,如果为真则返回到判断变量是否小于模块大小的步骤,反复循环,直到变量小于模块大小不成立即为假、或者判断复制后的执行结果为假,则结束该控制流程。进ー步的,当功能模块的插件plugin处于互斥关系吋,执行互斥关系容器类用spring配置的xml文件初始化模块Module的属性,添加vassp的子类到模块Module中;接着,执行控制方法,初始化变量;进ー步判断变量是否小于模块大小;当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,将结果赋值;然后判断赋值后的执行结果是否为真,如果为真,则结束该控制流程;如果判断赋值后的执行结果为假,则返回到判断变量是否小于模块大小的步骤,反复循环,直到变量小于模块大小为假,则结束该控制流程。另ー方面,提供一种程序结构插件化系统,其在浏览器/服务器B/S系统中,基于Spring框架的扩展,实现业务流程控制,其特征在干,包括总控制模块,控制整个流程的运行;初始化模块接受用户请求,初始化请求;第一判断模块,判断容器类中是否有功能实现类,如果有,则由第一控制模块来执行该类 的控制方法,并将环境变量和javaBean放入环境和服务运行Bean中,返回到判断步骤,并将所有执行结果放到响应中;反复循环后,当判断容器类中没有功能实现类时,则结束控制流程。进ー步的,容器类包括全关系容器类、与关系容器类、互斥关系容器类,完成功能模块的插件plugin控制。进ー步的,当功能模块的插件plugin处于全关系时,执行全关系容器类在spring配置文件中配置模块属性包含的插件plugin ;由第二控制模块,执行控制方法,初始化变量;第二判断模块,判断变量是否小于模块大小;当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,返回到判断步骤,反复循环,直到变量小于模块大小不成立,判断结果为假,结束该控制流程。进ー步的,当功能模块的插件plugin处于与关系时,执行与关系容器类用spring配置的xml文件初始化模块Module的属性,添加vassp的子类到模块Module中;第ニ控制模块,执行控制方法,初始化变量;第二判断模块,判断变量是否小于模块大小;当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,将结果赋值;然后第三判断模块,判断赋值后的执行结果是否为真,如果为真则返回到判断变量是否小于模块大小的步骤,反复循环,直到变量小于模块大小不成立即为假、或者判断复制后的执行结果为假,则结束该控制流程。进ー步的,当功能模块的插件plugin处于互斥关系吋,执行互斥关系容器类用spring配置的xml文件初始化模块Module的属性,添加vassp的子类到模块Module中;第ニ控制模块,执行控制方法,初始化变量;第二判断模块,判断变量是否小于模块大小;当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,将结果赋值;然后第三判断模块,判断赋值后的执行结果是否为真,如果为真,则结束该控制流程;如果判断赋值后的执行结果为假,则返回到判断变量是否小于模块大小的步骤,反复循环,直到变量小于模块大小为假,则结束该控制流程。本发明通过对业务流程进行适当粒度的细分,极大的増加了程序的复用性,实现了可插拔式的程序功能,从而完善了程序的性能整合、配置,优化了程序开发/设计的性能。采用本发明提供的方法和系统,在spring开源框架之下,进行扩展,通过对可配置性的功能模块进行整合,可以完成更为复杂的、完整的业务功能的程序设计。通过本发明的上述技术方案,解决了对复杂业务流程的拆分,组装,解决了大型项目中,代码重复率高,设计混乱,结构不清晰,不统ー的技术问题。
并且,可通过本发明提供的配置方式,快速搭建出系统的雏形,进ー步解决了传统IT系统移动化开发方式中工作量大,成本高,风险高的问题,可以帮助开发人员快速进入业务设计阶段和需求实现阶段。本发明适用于依托于spring框架的,业务较为复杂的,程序复用性要求较高的系统领域当中,对webservice开发过程中的业务流程(主体功能部分)的支持,尤为出色。


图I为最简单的两个功能/业务模块关系图。图2多个功能/业务模块关系图。图3为本发明所涉及的类的继承关系图。 图4为本发明具体实施方式
的容器类AllPluRinSuite中执行的流程图。图5为本发明具体实施方式
的容器类AndPluginSuite中执行的流程图。图6为本发明具体实施方式
的容器类OrPluginSuite中执行的流程图。图7为本发明具体实施方式
的參数类的类结构和继承关系图。图8是本发明具体实施方式
的整体执行流程图。
具体实施例方式本发明主要通过对业务流程进行适当粒度的细分,极大的増加了程序的复用性,实现了可插拔式的程序功能,从而完善了程序的性能整合、配置,优化了程序开发/设计的性能。本发明的系统和方法在spring开源框架之下,进行扩展,通过对可配置性的功能模块进行整合,可以完成更为复杂的、完整的业务功能的程序设计。在B/S系统,一般都采用MVC “Model-View-Controller”(模型_视图-控制器)的设计模式(MVC应用程序总是由这三个部分组成),Event (事件)导致Controller改变Model或View,或者同时改变两者。只要Controller改变了 Models的数据或者属性,所有依赖的View都会自动更新。类似的,只要Controller改变了 View, View会从潜在的Model中获取数据来刷新自己。传统的设计中,对M层(服务层)的设计对每个业务的功能模块,一般是按照业务流程进行编码。当然,如果业务流程简单的话,按照业务流程编码无可厚非。但是如果业务流程特别复杂的话,那么我们就有必要对整体的业务进行细粒度的划分,而细分出来的业务模块之间需要交流,那么控制代码就会很多,会造成程序结构的混乱。这样的代码对于读编码的人完全可以说成是ー种灾难,对程序的可读性和扩展性造成非常大的困难,由此会造成对程序的后期维护成本的增高。特别是系统交割到了维护人员的手中以后,如果用户的业务的増加和变化比较频繁,那么代码维护起来成本是会非常高的。所以,在对整体业务进行细粒度的划分以后,对于他们的控制会成为非常大的ー个问题。针对这种情况,本发明改进了整体业务的细粒度划分和控制,其能很清晰的对划分好的细粒度的业务进行良好的结构控制。一方面,使的业务流程清晰,一目了然,看到代码如同看到系统的流程图ー样,能够准确定位出业务处理的阶段。另ー方面,把业务的流程分割成了可以插拔式的插件形式,针对用户可能会有较多的业务增加和变化的情况,可以很方便的増加或者取消某个功能。如果把ー个整体业务划分成多个业务模块A,B,C···,那么按照先后的顺序,可以抽象出来所有业务模块之间的关系为图I所示。图I中,是最简单的两个功能模块之间的关系描述,它说明依次执行A模块,B模块,C模块,……,并且后面的模块只与他前面的模块有关系(即前面的模块执行的結果,决定他后面的模块是否被执行)。图2中,是描述多个模块之间存在的关系,它说明按照前后顺序,第N+1个模块的执行与否与前面N个模块之间都可能存在关系,决定于前面N个模块给第N+1个模块传达的状态消息是什么。如果上面的功能模块很多的话,放到ー个类中进行编码,那么很容易由于控制代码很多,造成程序流程混乱,可读性差的现象。而且在程序设计中,由于缺乏ー个标准,会浪费大量的时间在区分划分功能模块,进行流程控制之上。下面将具体描述本发明的系统和方法,是如何处理这种复杂的关系的。 首先,对于第一种情况,无碍乎有以下几种情况
1,如果A执行成功,则执行B,如果A执行失败,则不执行B,那么我们可以用逻辑中的and关系来描述这种情况;
2,如果A执行成功,则不执行B,如果A执行不成功,则执行B,该关系是ー种或者A执行,或者B执行的互斥关系,那么我们可以用逻辑中的or关系来表示(和数学中的or不太一祥,这里仅表示互斥关系或叫“或”关系);
3,不管A执行与否,都执行B,即A与B没有什么关系,A与B都要执行,但是一般来说A与B之间有先后的执行顺序,我们可以用All这个关系来说明。
那么根据如上的关系,我们可以在程序中设计出几个专门控制流程的类,他们就像是ー个容器,我们将所有的需要执行的功能模块放到这个容器中,这个容器具有控制功能,能够让其中的功能模块遵循and,or和all的关系来执行。对此,本发明的系统和方法通过设计出ー个能够处理同一个类型的參数的接ロ,该接ロ定义ー个接ロ方法,该方法需要指定ー个參数,所有的功能模块都实现这个接ロ类,利用这个方法和这个參数,这样这个參数就可以在多个功能模块之间进行传递,就可以将多个继承自统ー接ロ的功能模块,无缝的进行连接。当然,这个參数的作用还不止如此,这个參数最大的作用是1,由于将各个模块中所需要的參数都封装到了这个參数中,这个參数对象在不同的插件plugin中进行传递,姆个功能模块的插件Plugin都能对參数进行补充或者状态的修改,通过这个,就能够对其他的功能模块的插件plugin进行干预;2,将姆ー个功能模块的插件plugin的输出结果可以放到这个參数对象当中,最終可以通过此对象获取最終需要返回给前台的結果。针对这两种情况,本发明设计了两种类型的类,一种作为是作为容器的类,可以用来控制功能模块插件plugin的执行次序;另一种类用作实现真正的功能模板的类,具体的实现功能的类,需要继承于此类。类的继承如图3所示。业务流程插件和业务流程执行框架实现了相同的接ロ IPlugin,接 ロ 定义了入口 execute 方法;AbstractPlugin 作为实现接 ロ IPlugin的第一级抽象类,用于存放业务流程插件和业务流程执行框架的公共属性和方法;AbstractPluginSuite作为业务流程执行框架的抽象类,定义了业务流程执行框架的公共属性和方法,重点定义了执行单个业务流程插件的方法execute方法供框架子类使用,同时定义了 doexecute方法供具体业务流程执行框架实现;AllPluginSuite、AndPluginSuite、OrPluginSuite这三个业务流程执行框架实现了 doexecute方法对应实现业务中常用的三种业务执行流程类型全部执行、全部成功才成功、任一成功就成功,供配置业务流程使用;VaSSpPlugin为业务流程插件的抽象类,用于存放业务流程插件的公共属性和方法,实现了 execute方法,定义了 doexecute抽象方法供具体业务流程插件实现,其余业务流程插件均继承自此方法;具体的业务流程插件实现doexecute方法,在其中实现具体的业务流程。当控制方法/模块为上述第三种流程不管A执行与否,都执行B,即A与B没有什么关系,A与B都要执行,但是一般来说A与B之间有先后的执行顺序,我们可以用All这个关系来说明。此时,通过AU容器 类来控制功能模块Plugin的流程,如图4所示容器类AllPluginSuite中执行流程。流程开始Begin,接着,在spring配置文件中配置模块(组件)Module属性包含的功能模块plugin,再进入执行定义的DoExecute方法。Spring中回叫Callback模式和模板Template模式合用,随处可见,而该doExecute方法就是HibernateTemplate模板类中的ー个核心的方法,这个核心的方法采用模板方法完成相关的固定操作建立连接,执行操作,释放连接。其中的具体步骤通过回调传入的对象来完成,这个对象就是实现了 Callback接ロ的类。进入doExecute方法处理,先声明初始化变量i=0,进入模块(组件)大小(尺寸)Module, size的判断,当i小于模块(组件)大小(尺寸)时,判断为真,执行模块(组件)获得Modules, get、目标(对象或变量)执行方法,并且i++ (i加1),并返回到判断步骤,反复循环,直到i小于模块(组件)大小(尺寸)不成立(不小于模块(组件)大小(尺寸)吋),判断结果为假,结束该All控制流程。当控制方法/模块为上述第一种流程如果A执行成功,则执行B,如果A执行失败,则不执行B,那么我们可以用逻辑中的and关系来描述这种情況。此时,通过And容器类来控制功能模块Plugin的流程,如图5所示容器类容器类AndPluginSuite中执行流程。流程开始Begin,接着,在spring配置的xml文件中初始化模块(组件)Module的属性,添加vassp的子类到模块(组件)Module中。再执行目标(对象)的DoExecute方法。进入doExecute方法处理,先声明初始化变量i=0,进入模块(组件)大小(尺寸)Module, size的判断,当i小于模块(组件)大小(尺寸)时,判断为真,执行模块(组件)获得Modules, get以及目标(对象或变量)的执行方法,并且i++ (i加1),将结果赋值给布尔变量b。之后,判断执行结果b是否为真(b=true否),为真,则返回到之前的判断模块(组件)大小(尺寸)Module, size的判断步骤,反复循环,直到i小于模块(组件)大小(尺寸)不成立(不小于模块(组件)大小(尺寸)吋),判断结果为假,结束该And控制流程。如果在步骤——判断执行结果b=true,当判断为假(不成立),则也结束该And控制流程。当控制方法/模块为上述第二种流程如果A执行成功,则不执行B,如果A执行不成功,则执行B,该关系是ー种或者A执行,或者B执行的互斥关系,那么我们可以用逻辑中的or关系来表示(和数学中的or不太一祥,这里仅表示互斥关系)。此时,通过Or容器类来控制功能模块Plugin的流程,如图6所示容器类OrPluginSuite中执行流程。流程开始Begin,接着,在spring配置的xml文件初始化模块(组件)Module的属性,添加vassp的子类到模块(组件)Module中。再执行目标(对象)的DoExecute方法。进入doExecute方法处理,先声明初始化变量i=0,进入模块(组件)大小(尺寸)Module, size的判断,当i小于模块(组件)大小(尺寸)时,判断为真,执行模块(组件)获得Modules, get以及目标(对象或变量)的执行方法,并且i++ (i加1),将结果赋值给布尔变量b。之后,判断执行结果b是否为真(b=true否),为真则结束该Or控制流程(容器类的执行);为假(结果错误false)则返回到之前的判断模块(组件)大小(尺寸)Module, size的判断步骤,反复循环,直到i小于模块(组件)大小(尺寸)不成立(不小于模块(组件)大小(尺寸)吋),判断结果为假,结束该Or控制流程。參数类的类结构和继承关系如图7所示。此參数类贯穿于各个plugin的doexecute方法中,请求request用于初始化用户的请求參数,响应response用于返回给用户业务执行的输出結果,context (环境、上下文)是ー个Map对象,用于存储用户需要的上下文环境变量,serviceRunBean用于存储各个业务模块(功能模块插件plugin)在业务运行的过程中的Bean类对象,是ー个针对于具体业务的存储类。图8是本发明具体实施方式
的整体执行流程图。首先,本方法/系统执行开始Begin,接受用户请求后,初始化请求request。接着判断容器类中是否有功能实现类,如果是有,则执行该类的do execute方法,执行完后将环境变量和java Bean放到context和 serviceRunBean当中,将执行的所有结果放到响应response中则结束当前的do execute流程,继续返回到判断容器类中是否有功能实现类的步骤,如此循环。当判断容器类中是否有功能实现类的步骤,如果是否,则结束流程。由上述本发明的具体实施方式
可知,通过对业务流程进行适当粒度的细
分,极大的増加了程序的复用性,实现了可插拔式的程序功能(功能模块的插件、以及容器类对功能模块插件执行的流程控制)。对复杂业务流程的拆分,组装,使系统的程序设计直接能够以插件的形式摆在开发者面前,为客户端程序员提供良好的代码结构和业务流程设计性能(优化),増加程序的复用性、完善了程序的性能整合、配置。也就避免了大型项目中,代码重复率高,设计混乱,结构不清晰,不统ー的缺陷。应用本发明提供的方法,实现可插拔式的程序功能,对于非常复杂的业务流程,将能够減少40%-50%的工作量,极大的提高了工作效率,降低了项目实施风险。下列编写的具体的功能类,继承自VasspPlugin. java,实现public final Objectexecute (Object object) tnrows Exception 万法
通过编写的程序举例,在处理boss测订购可选销售品时的实现,作为本发明的具体实施方式
的參考,在构建网络控制程序时,包括了插件化设计和类的调用、核心方法的执行情况等,实现的简化而清晰的流程控制方式
package com. sitech. engine, server, plugin, boss;
import java. util. Date;
import java. util. List;
import org. apache, commons, logging. Log;
import org. apache, commons, logging. LogFactory;
import com. sitech. engine, bo. IAbleOrderProdOfferQryBO;
import com. sitech. engine, bo. IProdOfferBO;
import com. sitech. outsys. intf. server, boss. bean. AbleOrderProdOfferInfo;import com. sitech. outsys. intf. server.boss.bean.AbleOrderProdOfferQryRequest;
import com. sitech. outsys. intf. server.boss.bean.AbleOrderProdOfferQryResponse;
import com. sitech. vassp. plugin. VasspPlugin; import com. sitech. vassp. plugin. VasspPluginBean; import com. sitech. vassp. util. CodeConstants;
* boss侧订购可选销售品时调用 氺 author guohao
氺氺/
public class AbleOrderProdOfferQryPlugin extends VasspPiugin {
private static nnal Log log = LogFactory. getLog (AbleOrderProdOfferQryPlugin, class);
private IAbleOrderProdOfferQryBO abIeOrderProdOfferQryBO;private IProdOfferBO prodOfferBO;protected Boolean doexecute (VasspPluginBean pluginBean) throwsException {
AbleOrderProdOfferQryRequest request =(AbleOrderProdOfferQryRequest)pluginBean. request;
AbleOrderProdOfferQryResponse response =(AbleOrderProdOfferQryResponse)pluginBean. response;
long startTime = System. currentTimeMi丄丄is 0 ;
List<AbleOrderProdOfferInfo> infoList = abIeOrderProdOfferQryBO. queryAbIeOrderProdOfferInfo (request);
long endtime = System. currentTimeMillis(); if (request. getUserIDNo () !=null) {
log. info ("用户编码,+request. getUserIDNo ());
}
if (request. getProdOfferCode () !=null) {
log. info C 销售品"+request. getProdOfferCode ());
}
log. info查询时间:"+(endtime-startTime)/1000. 0+"秒
=========");
if (infoList !=null && infoList. size () >0) {
AbleOrderProdOfferInfo[] abIeOrderProdOfferInfoArray = newAbleOrderProdOfferInfo[infoList. size ()];
infoList. toArray (abIeOrderProdOfferInfoArray);log. info(〃查询可订购销售品成功! 〃);response. setResult(CodeConstants. SUCCESS);
response. setResultDesc (〃查询可订购销售品成功! 〃);response.SetAbieOrderProdOfferinfoArray(abIeOrderProdOfferInfoArray;;return Boolean. TRUE;
}
log. info (〃没有可订购销售品! 〃); response. setResult(しodeConstants. OTHER); response. setResultDesc (〃 没有可订购销售品!"); return Boolean. TRUE; }
public IAbIeOrderProdOfferQryBO getAbleOrderProdOfferQryBO() { return abIeOrderProdOfferQryBO;
}
public void SetAbleOrderProdOfferQryBO(
IAbIeOrderProdOfferQryBO abIeOrderProdOfferQryBO) { this, abIeOrderProdOfferQryBO = abIeOrderProdOfferQryBO;
}
public IProdOfferBO getProdOfferBO() { return prodOfferBO;
}
public void setProdOfferBO(IProdOfferBO prodOfferBO) { this.prodOfferBO = prodOfferBO;
}
}
在spring的配置文件中,配置下
<bean id= abIeOrderProdOfferQryServicePlugin ^ Class=^Cffi. si tech. common·plugin. AndPluginSui te >
〈property name= modules<list>
〈ref bean= ^ableOrderProdOfferQryPlugin ,,/>
</list>
</property>
</bean>
<bean id= ab IeOrderProdOfferQryPlug in"class= com. si tech. engine·
server· plugin, boss· AbleOrderProdOfferQryPlugin #>
くproperty name= able Or d e r P r odOfferQryBO ,,1C ef ニ,,ab I eOr derProdOfferQryBO" >〈/property〉
</bean>
权利要求
1.一种程序结构插件化方法,其在浏览器/服务器B/S系统中,基于Spring框架的扩展,实现业务流程控制,其特征在于 对整体的业务流程准确定位出业务处理阶段; 对整体的业务流程进行细粒度的划分,分割成可以插拔式的功能模块的插件plugin;根据业务流程的前后功能模块的关系,执行相应的控制模块,即全关系控制模块AllPluginSuite、与关系控制模块AndPluginSuite、互斥关系控制模块OrPluginSuite,完成功能模块的插件Plugin执行控制,获得结果并返回。
2.如权利要求I所述的方法,其特征在于 业务流程的前后功能模块,称模块A、模块B,其关系为, (O如果模块A执行成功,则执行模块B,如果模块A执行失败,则不执行模块B,为逻辑中的“与”And关系;(2)如果模块A执行成功,则不执行模块B,如果模块A执行不成功,则执行模块B,该关系是一种或者模块A执行,或者模块B执行的互斥关系,为逻辑中的“互斥” Or关系;(3)不管模块A执行与否,都执行模块B,即模块A与模块B没有关系、但有先后的执行顺序,为“全” All关系。
3.如权利要求2所述的方法,其特征在于 全关系控制模块AllPluginSuite、与关系控制模块AndPluginSuite、互斥关系控制模块OrPluginSuite,依次对应所述全关系All、与关系And、互斥关系Or。
4.如权利要求3所述的方法,其特征在于,当功能模块的插件plugin处于全关系时,执行全关系控制模块AllPluginSuite,步骤如下 在spring配置文件中配置模块属性包含的插件plugin ; 接着,执行控制方法,初始化变量; 进一步判断变量是否小于模块大小; 当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,返回到判断步骤,反复循环,直到变量小于模块大小不成立,判断结果为假,结束该控制流程。
5.如权利要求3所述的方法,其特征在于,当功能模块的插件plugin处于与关系时,执行与关系控制模块AndPluginSuite,步骤如下 用spring配置的xml文件初始化模块Module的属性,添加vassp的子类到模块Module中; 接着,执行控制方法,初始化变量; 进一步判断变量是否小于模块大小; 当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,将结果赋值;然后判断赋值后的执行结果是否为真,如果为真则返回到判断变量是否小于模块大小的步骤,反复循环,直到变量小于模块大小不成立即为假、或者判断复制后的执行结果为假,则结束该控制流程。
6.如权利要求3所述的方法,其特征在于,当功能模块的插件plugin处于互斥关系时,执行互斥关系控制模块OrPluginSuite,步骤如下 用spring配置的xml文件初始化模块Module的属性,添加vassp的子类到模块Module中; 接着,执行控制方法,初始化变量;进一步判断变量是否小于模块大小; 当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,将结果赋值; 然后判断赋值后的执行结果是否为真,如果为真,则结束该控制流程; 如果判断赋值后的执行结果为假,则返回到判断变量是否小于模块大小的步骤,反复循环,直到变量小于模块大小为假,则结束该控制流程。
7.一种程序结构插件化方法,其在浏览器/服务器B/S系统中,基于Spring框架的扩展,实现业务流程控制,其特征在于 接受用户请求,初始化请求; 判断容器类中是否有功能实现类,如果有,则执行该类的控制方法,并将环境变量和javaBean放入环境和服务运行Bean中,返回到判断步骤,并将所有执行结果放到响应中;反复循环后,当判断容器类中没有功能实现类时,则结束控制流程。
8.如权利要求7所述的方法,其特征在于,容器类包括全关系容器类、与关系容器类、互斥关系容器类,完成功能模块的插件Plugin控制。
9.如权利要求8所述的方法,其特征在于,当功能模块的插件plugin处于全关系时,执行全关系容器类,步骤如下 在spring配置文件中配置模块属性包含的插件plugin ; 接着,执行控制方法,初始化变量; 进一步判断变量是否小于模块大小; 当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,返回到判断步骤,反复循环,直到变量小于模块大小不成立,判断结果为假,结束该控制流程。
10.如权利要求8所述的方法,其特征在于,当功能模块的插件plugin处于与关系时,执行与关系容器类,步骤如下 用spring配置的xml文件初始化模块Module的属性,添加vassp的子类到模块Module中; 接着,执行控制方法,初始化变量; 进一步判断变量是否小于模块大小; 当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,将结果赋值;然后判断赋值后的执行结果是否为真,如果为真则返回到判断变量是否小于模块大小的步骤,反复循环,直到变量小于模块大小不成立即为假、或者判断复制后的执行结果为假,则结束该控制流程。
11.如权利要求8所述的方法,其特征在于,当功能模块的插件plugin处于互斥关系时,执行互斥关系容器类,步骤如下 用spring配置的xml文件初始化模块Module的属性,添加vassp的子类到模块Module中; 接着,执行控制方法,初始化变量; 进一步判断变量是否小于模块大小; 当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,将结果赋值; 然后判断赋值后的执行结果是否为真,如果为真,则结束该控制流程; 如果判断赋值后的执行结果为假,则返回到判断变量是否小于模块大小的步骤,反复循环,直到变量小于模块大小为假,则结束该控制流程。
12.—种程序结构插件化系统,其在浏览器/服务器B/S系统中,基于Spring框架的扩展,实现业务流程控制,其特征在于,包括 总控制模块,控制整个流程的运行; 初始化模块接受用户请求,初始化请求; 第一判断模块,判断容器类中是否有功能实现类,如果有,则由第一控制模块来执行该类的控制方法,并将环境变量和javaBean放入环境和服务运行Bean中,返回到判断步骤,并将所有执行结果放到响应中; 反复循环后,当判断容器类中没有功能实现类时,则结束控制流程。
13.如权利要求12所述的系统,其特征在于,容器类包括全关系容器类、与关系容器类、互斥关系容器类,完成功能模块的插件plugin控制。
14.如权利要求13所述的系统,其特征在于,当功能模块的插件plugin处于全关系时,执行全关系容器类 在spring配置文件中配置模块属性包含的插件plugin ; 由第二控制模块,执行控制方法,初始化变量; 第二判断模块,判断变量是否小于模块大小; 当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,返回到判断步骤,反复循环,直到变量小于模块大小不成立,判断结果为假,结束该控制流程。
15.如权利要求13所述的系统,其特征在于,当功能模块的插件plugin处于与关系时,执行与关系容器类 用spring配置的xml文件初始化模块Module的属性,添加vassp的子类到模块Module中; 第二控制模块,执行控制方法,初始化变量; 第二判断模块,判断变量是否小于模块大小; 当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,将结果赋值;然后第三判断模块,判断赋值后的执行结果是否为真,如果为真则返回到判断变量是否小于模块大小的步骤,反复循环,直到变量小于模块大小不成立即为假、或者判断复制后的执行结果为假,则结束该控制流程。
16.如权利要求13所述的系统,其特征在于,当功能模块的插件plugin处于互斥关系时,执行互斥关系容器类 用spring配置的xml文件初始化模块Module的属性,添加vassp的子类到模块Module中; 第二控制模块,执行控制方法,初始化变量; 第二判断模块,判断变量是否小于模块大小; 当变量小于模块大小时,为真,执行目标及模块获得方法,并且变量加1,将结果赋值;然后第三判断模块,判断赋值后的执行结果是否为真,如果为真,则结束该控制流程;如果判断赋值后的执行结果为假,则返回到判断变量是否小于模块大小的步骤,反复循环,直到变量小于模块大小为假,则结束该控制流程。
全文摘要
本发明涉及一种程序结构插件化方法,其在浏览器/服务器B/S系统中,基于Spring框架的扩展,实现业务流程控制,其细分业务流程,接受用户请求,初始化请求,通过判断容器类中是否有功能实现类,并当有时执行该类的控制方法,将环境变量和javaBean放入环境和服务运行Bean中,返回到判断步骤,并将所有执行结果放到响应中;在反复循环后,当判断容器类中没有功能实现类时,结束控制流程。本发明对业务流程进行适当粒度的细分,增加了程序复用性、实现了可插拔式程序功能,完善了程序的性能整合、配置,优化了程序开发/设计的性能,从而解决了复杂业务流程的拆分、组装,以及大型项目中代码重复率高、设计混乱、结构不清晰、不统一的问题。
文档编号G06F9/44GK102662656SQ20121006845
公开日2012年9月12日 申请日期2012年3月15日 优先权日2012年3月15日
发明者马嘉欢, 骆群 申请人:北京神州数码思特奇信息技术股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1