亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種程序結構插件化方法及系統(tǒng)的制作方法

文檔序號:6366399閱讀:209來源:國知局
專利名稱:一種程序結構插件化方法及系統(tǒng)的制作方法
技術領域
本發(fā)明涉及程序結構插件化方法,尤其涉及在spring開源框架下進行擴展的性能整合配置、優(yōu)化程序開發(fā)/設計性能的技木,屬于計算機領域。
背景技術
進入21世紀,隨著計算機處理器的爆炸式增長,帶來軟件系統(tǒng)的諸多問題,如軟件系統(tǒng)的復雜性等問題。面對不斷變化的性能要求,通常的軟件系統(tǒng)往往過于僵硬、脆弱、不易復用、維護困難。一方面,Java編程語言生逢其時(互聯(lián)網(wǎng)的興起),并且吸收總結了前人的經(jīng)驗教訓,反映了最新技木,受到廣泛的歡迎和采用。自1995年問世以來,其成功幾乎任何編程語 言都無法媲美,其解決了程序開發(fā)過程中很多的問題。其中,spring開源框架,應用java面向?qū)ο蟮耐昝荔w現(xiàn),綜合運用面向?qū)ο笳Z言的繼承,多態(tài)和良好的封裝性,使的系統(tǒng)的程序設計直接能夠以插件的形式擺在開發(fā)者面前,為客戶端程序員提供了良好的代碼結構和業(yè)務流程設計。但是,已有的spring開源框架在使得系統(tǒng)程序結構插件化的技術上,還存在如下不足雖然極大的簡化了客戶端程序員對于復雜業(yè)務流程的程序的設計過程,但是它對事務的控制方面還有欠佳的表現(xiàn),比如,對事務的控制主要是應用spring的配置型的事務控制,但是筆者認為這方面的功能有待于改進;又比如,主要是針對基于spring框架進行插件的配置,對于非spring項目,缺乏相關配置方法的說明(實際上,這個框架既是基于spring的,但又是可以脫離spring進行擴展)。從而導致了大型項目中,代碼重復率高,設計混亂,結構不清晰,不統(tǒng)ー的問題。

發(fā)明內(nèi)容
為克服現(xiàn)有技術的上述缺陷,本發(fā)明提供了一種程序結構插件化方法,其在瀏覽器/服務器B/S系統(tǒng)中,基于Spring框架的擴展,實現(xiàn)業(yè)務流程控制,其特征在于對整體的業(yè)務流程準確定位出業(yè)務處理階段;對整體的業(yè)務流程進行細粒度的劃分,分割成可以插拔式的功能模塊的插件plugin ;根據(jù)業(yè)務流程的前后功能模塊的關系,執(zhí)行相應的控制模塊,即全關系控制模塊I IPluginSuite、與關系控制模塊AndPluginSuite、互斥關系控制模塊OrPluginSuite,完成功能模塊的插件plugin執(zhí)行控制,獲得結果并返回。進ー步的,該業(yè)務流程的前后功能模塊,稱模塊A、模塊B,其關系為,(I)如果模塊A執(zhí)行成功,則執(zhí)行模塊B,如果模塊A執(zhí)行失敗,則不執(zhí)行模塊B,為邏輯中的“與” And關系;(2)如果模塊A執(zhí)行成功,則不執(zhí)行模塊B,如果模塊A執(zhí)行不成功,則執(zhí)行模塊B,該關系是ー種或者模塊A執(zhí)行,或者模塊B執(zhí)行的互斥關系,為邏輯中的“互斥” Or關系;(3)不管模塊A執(zhí)行與否,都執(zhí)行模塊B,即模塊A與模塊B沒有關系、但有先后的執(zhí)行順序,為“全” Al I關系。進ー步的,全關系控制模塊AllPluginSuite、與關系控制模塊AndPluginSuite、互斥關系控制模塊OrPluginSuite,依次對應所述全關系All、與關系And、互斥關系Or。進ー步的,當功能模塊的插件plugin處于全關系時,執(zhí)行全關系控制模塊AllPluginSuite :在spring配置文件中配置模塊屬性包含的插件plugin ;接著,執(zhí)行控制方法,初始化變量;進ー步判斷變量是否小于模塊大?。划斪兞啃∮谀K大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,返回到判斷步驟,反復循環(huán),直到變量小于模塊大小不成立,判斷結果為假,結束該控制流程。進ー步的,當功能模塊的插件plugin處于與關系時,執(zhí)行與關系控制模塊AndPluginSuite :用spring配置的xml文件初始化模塊Module的屬性,添加vassp的子類到模塊Module中;接著,執(zhí)行控制方法,初始化變量;進ー步判斷變量是否小于模塊大??;當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,將結果賦值;然后判斷賦值后的執(zhí)行結果是否為真,如果為真則返回到判斷變量是否小于模塊大小的步驟,反復循環(huán),直到變量小于模塊大小不成立即為假、或者判斷復制后的執(zhí)行結果為假,則結束該控制流程。進一步的,當功能ホ旲塊的摘件plugin處于互斥關系時,執(zhí)行互斥關系控制ホ旲塊 OrPluginSuite :用spring配置的xml文件初始化模塊Module的屬性,添加vassp的子類到模塊Module中;接著,執(zhí)行控制方法,初始化變量;進ー步判斷變量是否小于模塊大??;當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,將結果賦值;然后判斷賦值后的執(zhí)行結果是否為真,如果為真,則結束該控制流程;如果判斷賦值后的執(zhí)行結果為假,則返回到判斷變量是否小于模塊大小的步驟,反復循環(huán),直到變量小于模塊大小為假,則結束該控制流程。另ー方面,本發(fā)明提供一種程序結構插件化方法,其在瀏覽器/服務器B/S系統(tǒng)中,基于Spring框架的擴展,實現(xiàn)業(yè)務流程控制,其特征在于接受用戶請求,初始化請求;判斷容器類中是否有功能實現(xiàn)類,如果有,則執(zhí)行該類的控制方法,并將環(huán)境變量和javaBean放入環(huán)境和服務運行Bean中,返回到判斷步驟,并將所有執(zhí)行結果放到響應中;反復循環(huán)后,當判斷容器類中沒有功能實現(xiàn)類時,則結束控制流程。進ー步的,容器類包括全關系容器類、與關系容器類、互斥關系容器類,完成功能模塊的插件plugin控制。進ー步的,當功能模塊的插件plugin處于全關系時,執(zhí)行全關系容器類在spring配置文件中配置模塊屬性包含的插件plugin ;接著,執(zhí)行控制方法,初始化變量;進一歩判斷變量是否小于模塊大??;當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,返回到判斷步驟,反復循環(huán),直到變量小于模塊大小不成立,判斷結果為假,結束該控制流程。進ー步的,當功能模塊的插件plugin處于與關系時,執(zhí)行與關系容器類用spring配置的xml文件初始化模塊Module的屬性,添加vassp的子類到模塊Module中;接著,執(zhí)行控制方法,初始化變量;進ー步判斷變量是否小于模塊大小;當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,將結果賦值;然后判斷賦值后的執(zhí)行結果是否為真,如果為真則返回到判斷變量是否小于模塊大小的步驟,反復循環(huán),直到變量小于模塊大小不成立即為假、或者判斷復制后的執(zhí)行結果為假,則結束該控制流程。進ー步的,當功能模塊的插件plugin處于互斥關系吋,執(zhí)行互斥關系容器類用spring配置的xml文件初始化模塊Module的屬性,添加vassp的子類到模塊Module中;接著,執(zhí)行控制方法,初始化變量;進ー步判斷變量是否小于模塊大小;當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,將結果賦值;然后判斷賦值后的執(zhí)行結果是否為真,如果為真,則結束該控制流程;如果判斷賦值后的執(zhí)行結果為假,則返回到判斷變量是否小于模塊大小的步驟,反復循環(huán),直到變量小于模塊大小為假,則結束該控制流程。另ー方面,提供一種程序結構插件化系統(tǒng),其在瀏覽器/服務器B/S系統(tǒng)中,基于Spring框架的擴展,實現(xiàn)業(yè)務流程控制,其特征在干,包括總控制模塊,控制整個流程的運行;初始化模塊接受用戶請求,初始化請求;第一判斷模塊,判斷容器類中是否有功能實現(xiàn)類,如果有,則由第一控制模塊來執(zhí)行該類 的控制方法,并將環(huán)境變量和javaBean放入環(huán)境和服務運行Bean中,返回到判斷步驟,并將所有執(zhí)行結果放到響應中;反復循環(huán)后,當判斷容器類中沒有功能實現(xiàn)類時,則結束控制流程。進ー步的,容器類包括全關系容器類、與關系容器類、互斥關系容器類,完成功能模塊的插件plugin控制。進ー步的,當功能模塊的插件plugin處于全關系時,執(zhí)行全關系容器類在spring配置文件中配置模塊屬性包含的插件plugin ;由第二控制模塊,執(zhí)行控制方法,初始化變量;第二判斷模塊,判斷變量是否小于模塊大??;當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,返回到判斷步驟,反復循環(huán),直到變量小于模塊大小不成立,判斷結果為假,結束該控制流程。進ー步的,當功能模塊的插件plugin處于與關系時,執(zhí)行與關系容器類用spring配置的xml文件初始化模塊Module的屬性,添加vassp的子類到模塊Module中;第ニ控制模塊,執(zhí)行控制方法,初始化變量;第二判斷模塊,判斷變量是否小于模塊大?。划斪兞啃∮谀K大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,將結果賦值;然后第三判斷模塊,判斷賦值后的執(zhí)行結果是否為真,如果為真則返回到判斷變量是否小于模塊大小的步驟,反復循環(huán),直到變量小于模塊大小不成立即為假、或者判斷復制后的執(zhí)行結果為假,則結束該控制流程。進ー步的,當功能模塊的插件plugin處于互斥關系吋,執(zhí)行互斥關系容器類用spring配置的xml文件初始化模塊Module的屬性,添加vassp的子類到模塊Module中;第ニ控制模塊,執(zhí)行控制方法,初始化變量;第二判斷模塊,判斷變量是否小于模塊大?。划斪兞啃∮谀K大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,將結果賦值;然后第三判斷模塊,判斷賦值后的執(zhí)行結果是否為真,如果為真,則結束該控制流程;如果判斷賦值后的執(zhí)行結果為假,則返回到判斷變量是否小于模塊大小的步驟,反復循環(huán),直到變量小于模塊大小為假,則結束該控制流程。本發(fā)明通過對業(yè)務流程進行適當粒度的細分,極大的増加了程序的復用性,實現(xiàn)了可插拔式的程序功能,從而完善了程序的性能整合、配置,優(yōu)化了程序開發(fā)/設計的性能。采用本發(fā)明提供的方法和系統(tǒng),在spring開源框架之下,進行擴展,通過對可配置性的功能模塊進行整合,可以完成更為復雜的、完整的業(yè)務功能的程序設計。通過本發(fā)明的上述技術方案,解決了對復雜業(yè)務流程的拆分,組裝,解決了大型項目中,代碼重復率高,設計混亂,結構不清晰,不統(tǒng)ー的技術問題。
并且,可通過本發(fā)明提供的配置方式,快速搭建出系統(tǒng)的雛形,進ー步解決了傳統(tǒng)IT系統(tǒng)移動化開發(fā)方式中工作量大,成本高,風險高的問題,可以幫助開發(fā)人員快速進入業(yè)務設計階段和需求實現(xiàn)階段。本發(fā)明適用于依托于spring框架的,業(yè)務較為復雜的,程序復用性要求較高的系統(tǒng)領域當中,對webservice開發(fā)過程中的業(yè)務流程(主體功能部分)的支持,尤為出色。


圖I為最簡單的兩個功能/業(yè)務模塊關系圖。圖2多個功能/業(yè)務模塊關系圖。圖3為本發(fā)明所涉及的類的繼承關系圖。 圖4為本發(fā)明具體實施方式
的容器類AllPluRinSuite中執(zhí)行的流程圖。圖5為本發(fā)明具體實施方式
的容器類AndPluginSuite中執(zhí)行的流程圖。圖6為本發(fā)明具體實施方式
的容器類OrPluginSuite中執(zhí)行的流程圖。圖7為本發(fā)明具體實施方式
的參數(shù)類的類結構和繼承關系圖。圖8是本發(fā)明具體實施方式
的整體執(zhí)行流程圖。
具體實施例方式本發(fā)明主要通過對業(yè)務流程進行適當粒度的細分,極大的増加了程序的復用性,實現(xiàn)了可插拔式的程序功能,從而完善了程序的性能整合、配置,優(yōu)化了程序開發(fā)/設計的性能。本發(fā)明的系統(tǒng)和方法在spring開源框架之下,進行擴展,通過對可配置性的功能模塊進行整合,可以完成更為復雜的、完整的業(yè)務功能的程序設計。在B/S系統(tǒng),一般都采用MVC “Model-View-Controller”(模型_視圖-控制器)的設計模式(MVC應用程序總是由這三個部分組成),Event (事件)導致Controller改變Model或View,或者同時改變兩者。只要Controller改變了 Models的數(shù)據(jù)或者屬性,所有依賴的View都會自動更新。類似的,只要Controller改變了 View, View會從潛在的Model中獲取數(shù)據(jù)來刷新自己。傳統(tǒng)的設計中,對M層(服務層)的設計對每個業(yè)務的功能模塊,一般是按照業(yè)務流程進行編碼。當然,如果業(yè)務流程簡單的話,按照業(yè)務流程編碼無可厚非。但是如果業(yè)務流程特別復雜的話,那么我們就有必要對整體的業(yè)務進行細粒度的劃分,而細分出來的業(yè)務模塊之間需要交流,那么控制代碼就會很多,會造成程序結構的混亂。這樣的代碼對于讀編碼的人完全可以說成是ー種災難,對程序的可讀性和擴展性造成非常大的困難,由此會造成對程序的后期維護成本的增高。特別是系統(tǒng)交割到了維護人員的手中以后,如果用戶的業(yè)務的増加和變化比較頻繁,那么代碼維護起來成本是會非常高的。所以,在對整體業(yè)務進行細粒度的劃分以后,對于他們的控制會成為非常大的ー個問題。針對這種情況,本發(fā)明改進了整體業(yè)務的細粒度劃分和控制,其能很清晰的對劃分好的細粒度的業(yè)務進行良好的結構控制。一方面,使的業(yè)務流程清晰,一目了然,看到代碼如同看到系統(tǒng)的流程圖ー樣,能夠準確定位出業(yè)務處理的階段。另ー方面,把業(yè)務的流程分割成了可以插拔式的插件形式,針對用戶可能會有較多的業(yè)務增加和變化的情況,可以很方便的増加或者取消某個功能。如果把ー個整體業(yè)務劃分成多個業(yè)務模塊A,B,C···,那么按照先后的順序,可以抽象出來所有業(yè)務模塊之間的關系為圖I所示。圖I中,是最簡單的兩個功能模塊之間的關系描述,它說明依次執(zhí)行A模塊,B模塊,C模塊,……,并且后面的模塊只與他前面的模塊有關系(即前面的模塊執(zhí)行的結果,決定他后面的模塊是否被執(zhí)行)。圖2中,是描述多個模塊之間存在的關系,它說明按照前后順序,第N+1個模塊的執(zhí)行與否與前面N個模塊之間都可能存在關系,決定于前面N個模塊給第N+1個模塊傳達的狀態(tài)消息是什么。如果上面的功能模塊很多的話,放到ー個類中進行編碼,那么很容易由于控制代碼很多,造成程序流程混亂,可讀性差的現(xiàn)象。而且在程序設計中,由于缺乏ー個標準,會浪費大量的時間在區(qū)分劃分功能模塊,進行流程控制之上。下面將具體描述本發(fā)明的系統(tǒng)和方法,是如何處理這種復雜的關系的。 首先,對于第一種情況,無礙乎有以下幾種情況
1,如果A執(zhí)行成功,則執(zhí)行B,如果A執(zhí)行失敗,則不執(zhí)行B,那么我們可以用邏輯中的and關系來描述這種情況;
2,如果A執(zhí)行成功,則不執(zhí)行B,如果A執(zhí)行不成功,則執(zhí)行B,該關系是ー種或者A執(zhí)行,或者B執(zhí)行的互斥關系,那么我們可以用邏輯中的or關系來表示(和數(shù)學中的or不太一祥,這里僅表示互斥關系或叫“或”關系);
3,不管A執(zhí)行與否,都執(zhí)行B,即A與B沒有什么關系,A與B都要執(zhí)行,但是一般來說A與B之間有先后的執(zhí)行順序,我們可以用All這個關系來說明。
那么根據(jù)如上的關系,我們可以在程序中設計出幾個專門控制流程的類,他們就像是ー個容器,我們將所有的需要執(zhí)行的功能模塊放到這個容器中,這個容器具有控制功能,能夠讓其中的功能模塊遵循and,or和all的關系來執(zhí)行。對此,本發(fā)明的系統(tǒng)和方法通過設計出ー個能夠處理同一個類型的參數(shù)的接ロ,該接ロ定義ー個接ロ方法,該方法需要指定ー個參數(shù),所有的功能模塊都實現(xiàn)這個接ロ類,利用這個方法和這個參數(shù),這樣這個參數(shù)就可以在多個功能模塊之間進行傳遞,就可以將多個繼承自統(tǒng)ー接ロ的功能模塊,無縫的進行連接。當然,這個參數(shù)的作用還不止如此,這個參數(shù)最大的作用是1,由于將各個模塊中所需要的參數(shù)都封裝到了這個參數(shù)中,這個參數(shù)對象在不同的插件plugin中進行傳遞,姆個功能模塊的插件Plugin都能對參數(shù)進行補充或者狀態(tài)的修改,通過這個,就能夠?qū)ζ渌墓δ苣K的插件plugin進行干預;2,將姆ー個功能模塊的插件plugin的輸出結果可以放到這個參數(shù)對象當中,最終可以通過此對象獲取最終需要返回給前臺的結果。針對這兩種情況,本發(fā)明設計了兩種類型的類,一種作為是作為容器的類,可以用來控制功能模塊插件plugin的執(zhí)行次序;另一種類用作實現(xiàn)真正的功能模板的類,具體的實現(xiàn)功能的類,需要繼承于此類。類的繼承如圖3所示。業(yè)務流程插件和業(yè)務流程執(zhí)行框架實現(xiàn)了相同的接ロ IPlugin,接 ロ 定義了入口 execute 方法;AbstractPlugin 作為實現(xiàn)接 ロ IPlugin的第一級抽象類,用于存放業(yè)務流程插件和業(yè)務流程執(zhí)行框架的公共屬性和方法;AbstractPluginSuite作為業(yè)務流程執(zhí)行框架的抽象類,定義了業(yè)務流程執(zhí)行框架的公共屬性和方法,重點定義了執(zhí)行單個業(yè)務流程插件的方法execute方法供框架子類使用,同時定義了 doexecute方法供具體業(yè)務流程執(zhí)行框架實現(xiàn);AllPluginSuite、AndPluginSuite、OrPluginSuite這三個業(yè)務流程執(zhí)行框架實現(xiàn)了 doexecute方法對應實現(xiàn)業(yè)務中常用的三種業(yè)務執(zhí)行流程類型全部執(zhí)行、全部成功才成功、任一成功就成功,供配置業(yè)務流程使用;VaSSpPlugin為業(yè)務流程插件的抽象類,用于存放業(yè)務流程插件的公共屬性和方法,實現(xiàn)了 execute方法,定義了 doexecute抽象方法供具體業(yè)務流程插件實現(xiàn),其余業(yè)務流程插件均繼承自此方法;具體的業(yè)務流程插件實現(xiàn)doexecute方法,在其中實現(xiàn)具體的業(yè)務流程。當控制方法/模塊為上述第三種流程不管A執(zhí)行與否,都執(zhí)行B,即A與B沒有什么關系,A與B都要執(zhí)行,但是一般來說A與B之間有先后的執(zhí)行順序,我們可以用All這個關系來說明。此時,通過AU容器 類來控制功能模塊Plugin的流程,如圖4所示容器類AllPluginSuite中執(zhí)行流程。流程開始Begin,接著,在spring配置文件中配置模塊(組件)Module屬性包含的功能模塊plugin,再進入執(zhí)行定義的DoExecute方法。Spring中回叫Callback模式和模板Template模式合用,隨處可見,而該doExecute方法就是HibernateTemplate模板類中的ー個核心的方法,這個核心的方法采用模板方法完成相關的固定操作建立連接,執(zhí)行操作,釋放連接。其中的具體步驟通過回調(diào)傳入的對象來完成,這個對象就是實現(xiàn)了 Callback接ロ的類。進入doExecute方法處理,先聲明初始化變量i=0,進入模塊(組件)大小(尺寸)Module, size的判斷,當i小于模塊(組件)大小(尺寸)時,判斷為真,執(zhí)行模塊(組件)獲得Modules, get、目標(對象或變量)執(zhí)行方法,并且i++ (i加1),并返回到判斷步驟,反復循環(huán),直到i小于模塊(組件)大小(尺寸)不成立(不小于模塊(組件)大小(尺寸)吋),判斷結果為假,結束該All控制流程。當控制方法/模塊為上述第一種流程如果A執(zhí)行成功,則執(zhí)行B,如果A執(zhí)行失敗,則不執(zhí)行B,那么我們可以用邏輯中的and關系來描述這種情況。此時,通過And容器類來控制功能模塊Plugin的流程,如圖5所示容器類容器類AndPluginSuite中執(zhí)行流程。流程開始Begin,接著,在spring配置的xml文件中初始化模塊(組件)Module的屬性,添加vassp的子類到模塊(組件)Module中。再執(zhí)行目標(對象)的DoExecute方法。進入doExecute方法處理,先聲明初始化變量i=0,進入模塊(組件)大小(尺寸)Module, size的判斷,當i小于模塊(組件)大小(尺寸)時,判斷為真,執(zhí)行模塊(組件)獲得Modules, get以及目標(對象或變量)的執(zhí)行方法,并且i++ (i加1),將結果賦值給布爾變量b。之后,判斷執(zhí)行結果b是否為真(b=true否),為真,則返回到之前的判斷模塊(組件)大小(尺寸)Module, size的判斷步驟,反復循環(huán),直到i小于模塊(組件)大小(尺寸)不成立(不小于模塊(組件)大小(尺寸)吋),判斷結果為假,結束該And控制流程。如果在步驟——判斷執(zhí)行結果b=true,當判斷為假(不成立),則也結束該And控制流程。當控制方法/模塊為上述第二種流程如果A執(zhí)行成功,則不執(zhí)行B,如果A執(zhí)行不成功,則執(zhí)行B,該關系是ー種或者A執(zhí)行,或者B執(zhí)行的互斥關系,那么我們可以用邏輯中的or關系來表示(和數(shù)學中的or不太一祥,這里僅表示互斥關系)。此時,通過Or容器類來控制功能模塊Plugin的流程,如圖6所示容器類OrPluginSuite中執(zhí)行流程。流程開始Begin,接著,在spring配置的xml文件初始化模塊(組件)Module的屬性,添加vassp的子類到模塊(組件)Module中。再執(zhí)行目標(對象)的DoExecute方法。進入doExecute方法處理,先聲明初始化變量i=0,進入模塊(組件)大小(尺寸)Module, size的判斷,當i小于模塊(組件)大小(尺寸)時,判斷為真,執(zhí)行模塊(組件)獲得Modules, get以及目標(對象或變量)的執(zhí)行方法,并且i++ (i加1),將結果賦值給布爾變量b。之后,判斷執(zhí)行結果b是否為真(b=true否),為真則結束該Or控制流程(容器類的執(zhí)行);為假(結果錯誤false)則返回到之前的判斷模塊(組件)大小(尺寸)Module, size的判斷步驟,反復循環(huán),直到i小于模塊(組件)大小(尺寸)不成立(不小于模塊(組件)大小(尺寸)吋),判斷結果為假,結束該Or控制流程。參數(shù)類的類結構和繼承關系如圖7所示。此參數(shù)類貫穿于各個plugin的doexecute方法中,請求request用于初始化用戶的請求參數(shù),響應response用于返回給用戶業(yè)務執(zhí)行的輸出結果,context (環(huán)境、上下文)是ー個Map對象,用于存儲用戶需要的上下文環(huán)境變量,serviceRunBean用于存儲各個業(yè)務模塊(功能模塊插件plugin)在業(yè)務運行的過程中的Bean類對象,是ー個針對于具體業(yè)務的存儲類。圖8是本發(fā)明具體實施方式
的整體執(zhí)行流程圖。首先,本方法/系統(tǒng)執(zhí)行開始Begin,接受用戶請求后,初始化請求request。接著判斷容器類中是否有功能實現(xiàn)類,如果是有,則執(zhí)行該類的do execute方法,執(zhí)行完后將環(huán)境變量和java Bean放到context和 serviceRunBean當中,將執(zhí)行的所有結果放到響應response中則結束當前的do execute流程,繼續(xù)返回到判斷容器類中是否有功能實現(xiàn)類的步驟,如此循環(huán)。當判斷容器類中是否有功能實現(xiàn)類的步驟,如果是否,則結束流程。由上述本發(fā)明的具體實施方式
可知,通過對業(yè)務流程進行適當粒度的細
分,極大的増加了程序的復用性,實現(xiàn)了可插拔式的程序功能(功能模塊的插件、以及容器類對功能模塊插件執(zhí)行的流程控制)。對復雜業(yè)務流程的拆分,組裝,使系統(tǒng)的程序設計直接能夠以插件的形式擺在開發(fā)者面前,為客戶端程序員提供良好的代碼結構和業(yè)務流程設計性能(優(yōu)化),増加程序的復用性、完善了程序的性能整合、配置。也就避免了大型項目中,代碼重復率高,設計混亂,結構不清晰,不統(tǒng)ー的缺陷。應用本發(fā)明提供的方法,實現(xiàn)可插拔式的程序功能,對于非常復雜的業(yè)務流程,將能夠減少40%-50%的工作量,極大的提高了工作效率,降低了項目實施風險。下列編寫的具體的功能類,繼承自VasspPlugin. java,實現(xiàn)public final Objectexecute (Object object) tnrows Exception 萬法
通過編寫的程序舉例,在處理boss測訂購可選銷售品時的實現(xiàn),作為本發(fā)明的具體實施方式
的參考,在構建網(wǎng)絡控制程序時,包括了插件化設計和類的調(diào)用、核心方法的執(zhí)行情況等,實現(xiàn)的簡化而清晰的流程控制方式
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側(cè)訂購可選銷售品時調(diào)用 氺 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系統(tǒng)中,基于Spring框架的擴展,實現(xiàn)業(yè)務流程控制,其特征在于 對整體的業(yè)務流程準確定位出業(yè)務處理階段; 對整體的業(yè)務流程進行細粒度的劃分,分割成可以插拔式的功能模塊的插件plugin;根據(jù)業(yè)務流程的前后功能模塊的關系,執(zhí)行相應的控制模塊,即全關系控制模塊AllPluginSuite、與關系控制模塊AndPluginSuite、互斥關系控制模塊OrPluginSuite,完成功能模塊的插件Plugin執(zhí)行控制,獲得結果并返回。
2.如權利要求I所述的方法,其特征在于 業(yè)務流程的前后功能模塊,稱模塊A、模塊B,其關系為, (O如果模塊A執(zhí)行成功,則執(zhí)行模塊B,如果模塊A執(zhí)行失敗,則不執(zhí)行模塊B,為邏輯中的“與”And關系;(2)如果模塊A執(zhí)行成功,則不執(zhí)行模塊B,如果模塊A執(zhí)行不成功,則執(zhí)行模塊B,該關系是一種或者模塊A執(zhí)行,或者模塊B執(zhí)行的互斥關系,為邏輯中的“互斥” Or關系;(3)不管模塊A執(zhí)行與否,都執(zhí)行模塊B,即模塊A與模塊B沒有關系、但有先后的執(zhí)行順序,為“全” All關系。
3.如權利要求2所述的方法,其特征在于 全關系控制模塊AllPluginSuite、與關系控制模塊AndPluginSuite、互斥關系控制模塊OrPluginSuite,依次對應所述全關系All、與關系And、互斥關系Or。
4.如權利要求3所述的方法,其特征在于,當功能模塊的插件plugin處于全關系時,執(zhí)行全關系控制模塊AllPluginSuite,步驟如下 在spring配置文件中配置模塊屬性包含的插件plugin ; 接著,執(zhí)行控制方法,初始化變量; 進一步判斷變量是否小于模塊大?。? 當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,返回到判斷步驟,反復循環(huán),直到變量小于模塊大小不成立,判斷結果為假,結束該控制流程。
5.如權利要求3所述的方法,其特征在于,當功能模塊的插件plugin處于與關系時,執(zhí)行與關系控制模塊AndPluginSuite,步驟如下 用spring配置的xml文件初始化模塊Module的屬性,添加vassp的子類到模塊Module中; 接著,執(zhí)行控制方法,初始化變量; 進一步判斷變量是否小于模塊大?。? 當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,將結果賦值;然后判斷賦值后的執(zhí)行結果是否為真,如果為真則返回到判斷變量是否小于模塊大小的步驟,反復循環(huán),直到變量小于模塊大小不成立即為假、或者判斷復制后的執(zhí)行結果為假,則結束該控制流程。
6.如權利要求3所述的方法,其特征在于,當功能模塊的插件plugin處于互斥關系時,執(zhí)行互斥關系控制模塊OrPluginSuite,步驟如下 用spring配置的xml文件初始化模塊Module的屬性,添加vassp的子類到模塊Module中; 接著,執(zhí)行控制方法,初始化變量;進一步判斷變量是否小于模塊大?。? 當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,將結果賦值; 然后判斷賦值后的執(zhí)行結果是否為真,如果為真,則結束該控制流程; 如果判斷賦值后的執(zhí)行結果為假,則返回到判斷變量是否小于模塊大小的步驟,反復循環(huán),直到變量小于模塊大小為假,則結束該控制流程。
7.一種程序結構插件化方法,其在瀏覽器/服務器B/S系統(tǒng)中,基于Spring框架的擴展,實現(xiàn)業(yè)務流程控制,其特征在于 接受用戶請求,初始化請求; 判斷容器類中是否有功能實現(xiàn)類,如果有,則執(zhí)行該類的控制方法,并將環(huán)境變量和javaBean放入環(huán)境和服務運行Bean中,返回到判斷步驟,并將所有執(zhí)行結果放到響應中;反復循環(huán)后,當判斷容器類中沒有功能實現(xiàn)類時,則結束控制流程。
8.如權利要求7所述的方法,其特征在于,容器類包括全關系容器類、與關系容器類、互斥關系容器類,完成功能模塊的插件Plugin控制。
9.如權利要求8所述的方法,其特征在于,當功能模塊的插件plugin處于全關系時,執(zhí)行全關系容器類,步驟如下 在spring配置文件中配置模塊屬性包含的插件plugin ; 接著,執(zhí)行控制方法,初始化變量; 進一步判斷變量是否小于模塊大?。? 當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,返回到判斷步驟,反復循環(huán),直到變量小于模塊大小不成立,判斷結果為假,結束該控制流程。
10.如權利要求8所述的方法,其特征在于,當功能模塊的插件plugin處于與關系時,執(zhí)行與關系容器類,步驟如下 用spring配置的xml文件初始化模塊Module的屬性,添加vassp的子類到模塊Module中; 接著,執(zhí)行控制方法,初始化變量; 進一步判斷變量是否小于模塊大?。? 當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,將結果賦值;然后判斷賦值后的執(zhí)行結果是否為真,如果為真則返回到判斷變量是否小于模塊大小的步驟,反復循環(huán),直到變量小于模塊大小不成立即為假、或者判斷復制后的執(zhí)行結果為假,則結束該控制流程。
11.如權利要求8所述的方法,其特征在于,當功能模塊的插件plugin處于互斥關系時,執(zhí)行互斥關系容器類,步驟如下 用spring配置的xml文件初始化模塊Module的屬性,添加vassp的子類到模塊Module中; 接著,執(zhí)行控制方法,初始化變量; 進一步判斷變量是否小于模塊大??; 當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,將結果賦值; 然后判斷賦值后的執(zhí)行結果是否為真,如果為真,則結束該控制流程; 如果判斷賦值后的執(zhí)行結果為假,則返回到判斷變量是否小于模塊大小的步驟,反復循環(huán),直到變量小于模塊大小為假,則結束該控制流程。
12.—種程序結構插件化系統(tǒng),其在瀏覽器/服務器B/S系統(tǒng)中,基于Spring框架的擴展,實現(xiàn)業(yè)務流程控制,其特征在于,包括 總控制模塊,控制整個流程的運行; 初始化模塊接受用戶請求,初始化請求; 第一判斷模塊,判斷容器類中是否有功能實現(xiàn)類,如果有,則由第一控制模塊來執(zhí)行該類的控制方法,并將環(huán)境變量和javaBean放入環(huán)境和服務運行Bean中,返回到判斷步驟,并將所有執(zhí)行結果放到響應中; 反復循環(huán)后,當判斷容器類中沒有功能實現(xiàn)類時,則結束控制流程。
13.如權利要求12所述的系統(tǒng),其特征在于,容器類包括全關系容器類、與關系容器類、互斥關系容器類,完成功能模塊的插件plugin控制。
14.如權利要求13所述的系統(tǒng),其特征在于,當功能模塊的插件plugin處于全關系時,執(zhí)行全關系容器類 在spring配置文件中配置模塊屬性包含的插件plugin ; 由第二控制模塊,執(zhí)行控制方法,初始化變量; 第二判斷模塊,判斷變量是否小于模塊大?。? 當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,返回到判斷步驟,反復循環(huán),直到變量小于模塊大小不成立,判斷結果為假,結束該控制流程。
15.如權利要求13所述的系統(tǒng),其特征在于,當功能模塊的插件plugin處于與關系時,執(zhí)行與關系容器類 用spring配置的xml文件初始化模塊Module的屬性,添加vassp的子類到模塊Module中; 第二控制模塊,執(zhí)行控制方法,初始化變量; 第二判斷模塊,判斷變量是否小于模塊大小; 當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,將結果賦值;然后第三判斷模塊,判斷賦值后的執(zhí)行結果是否為真,如果為真則返回到判斷變量是否小于模塊大小的步驟,反復循環(huán),直到變量小于模塊大小不成立即為假、或者判斷復制后的執(zhí)行結果為假,則結束該控制流程。
16.如權利要求13所述的系統(tǒng),其特征在于,當功能模塊的插件plugin處于互斥關系時,執(zhí)行互斥關系容器類 用spring配置的xml文件初始化模塊Module的屬性,添加vassp的子類到模塊Module中; 第二控制模塊,執(zhí)行控制方法,初始化變量; 第二判斷模塊,判斷變量是否小于模塊大?。? 當變量小于模塊大小時,為真,執(zhí)行目標及模塊獲得方法,并且變量加1,將結果賦值;然后第三判斷模塊,判斷賦值后的執(zhí)行結果是否為真,如果為真,則結束該控制流程;如果判斷賦值后的執(zhí)行結果為假,則返回到判斷變量是否小于模塊大小的步驟,反復循環(huán),直到變量小于模塊大小為假,則結束該控制流程。
全文摘要
本發(fā)明涉及一種程序結構插件化方法,其在瀏覽器/服務器B/S系統(tǒng)中,基于Spring框架的擴展,實現(xiàn)業(yè)務流程控制,其細分業(yè)務流程,接受用戶請求,初始化請求,通過判斷容器類中是否有功能實現(xiàn)類,并當有時執(zhí)行該類的控制方法,將環(huán)境變量和javaBean放入環(huán)境和服務運行Bean中,返回到判斷步驟,并將所有執(zhí)行結果放到響應中;在反復循環(huán)后,當判斷容器類中沒有功能實現(xiàn)類時,結束控制流程。本發(fā)明對業(yè)務流程進行適當粒度的細分,增加了程序復用性、實現(xiàn)了可插拔式程序功能,完善了程序的性能整合、配置,優(yōu)化了程序開發(fā)/設計的性能,從而解決了復雜業(yè)務流程的拆分、組裝,以及大型項目中代碼重復率高、設計混亂、結構不清晰、不統(tǒng)一的問題。
文檔編號G06F9/44GK102662656SQ20121006845
公開日2012年9月12日 申請日期2012年3月15日 優(yōu)先權日2012年3月15日
發(fā)明者馬嘉歡, 駱群 申請人:北京神州數(shù)碼思特奇信息技術股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1