一種基于事件鏈的用戶界面插件化交互方法
【專利摘要】本發(fā)明涉及應(yīng)用程序的用戶界面開發(fā)領(lǐng)域,具體是一種基于事件鏈的用戶界面插件化交互方法,其特征在于在插件的相互通信中,數(shù)據(jù)從第一插件A向第二插件B傳遞,我們將第一插件A作為一個事件源,第一插件A中用戶的操作作為事件,第二插件B作為事件監(jiān)聽者。當?shù)诙寮﨎被加載時,第二插件B向第一插件A注冊,注冊成功之后,一旦第一插件A中有第二插件B感興趣的事件發(fā)生,第一插件A便會將事件通知給監(jiān)聽者第二插件B。本發(fā)明同現(xiàn)有技術(shù)相比,其優(yōu)點在于:借助事件鏈的處理機制,解決應(yīng)用程序中交互用戶界面的插件間通信問題;擁有較佳的靈活性,創(chuàng)建更為穩(wěn)定的程序,減少開發(fā)者的重復(fù)編寫代碼勞動,各個部分之間的耦合度降低,獨立性增強。
【專利說明】一種基于事件鏈的用戶界面插件化交互方法
[【技術(shù)領(lǐng)域】]
[0001]本發(fā)明涉及應(yīng)用程序的用戶界面開發(fā)領(lǐng)域,具體是一種基于事件鏈的用戶界面插件化交互方法。
[【背景技術(shù)】]
[0002]實現(xiàn)界面層和業(yè)務(wù)層的分離,這是應(yīng)用程序開發(fā)者一直以來的理想。在傳統(tǒng)的開發(fā)過程中混淆了大量用于顯示邏輯的swing代碼和用于業(yè)務(wù)邏輯的代碼,使得界面設(shè)計與程序開發(fā)無法清晰的分離,導(dǎo)致大量顯示邏輯的swing代碼不能重用,這常常導(dǎo)致開發(fā)者不得不在顯示邏輯之間進行單調(diào)的復(fù)制一粘貼操作,進而導(dǎo)致同一段代碼出現(xiàn)多個版本,從而使得程序的調(diào)試和設(shè)計極其錯綜復(fù)雜。而通過設(shè)計模式中的命令模式將業(yè)務(wù)邏輯代碼從顯示邏輯中剝離出來,也僅是有限地實現(xiàn)了表現(xiàn)與邏輯的分離,始終沒有擺脫顯示與業(yè)務(wù)揉和的問題。
[0003]插件化交互方法是為了解決這一問題應(yīng)運而生的,軟件開發(fā)者通過公開的插件接口規(guī)范,在不修改程序主體(程序運行平臺)的情況下對功能進行擴展與加,這樣,開發(fā)者就可以根據(jù)實際需求來分析哪些部分功能由主體完成(即主體插件的基本功能),哪些部分功能由插件完成(即需要擴展的插件功能)。
[0004]但是插件化交互必須解決一個問題:如何在主程序與插件間正確地互相通信。目前,主要有三種插件間通信方法:通過包約束條件建立插件之間的關(guān)聯(lián)關(guān)系;擴展點機制實現(xiàn)插件間通信;使用單例模式實現(xiàn)插件間信息共享。這三種方法必須顯示建立兩個插件之間類的關(guān)聯(lián)關(guān)系,其中第二種方法還需要通過配置文件建立擴展和擴展點之間的關(guān)系。
[
【發(fā)明內(nèi)容】
]
[0005]本發(fā)明的目的是為了解決由于應(yīng)用程序開發(fā)過程中界面設(shè)計與程序開發(fā)無法清晰的分離,從而使得程序的調(diào)試和設(shè)計錯綜復(fù)雜,導(dǎo)致顯示與業(yè)務(wù)揉和的技術(shù)問題,實現(xiàn)界面層和業(yè)務(wù)層的分離,使插件化交互方法過程中程序與插件間正確地互相通信。
[0006]為了實現(xiàn)上述目的,提供一種基于事件鏈的用戶界面插件化交互方法,在插件的相互通信中,數(shù)據(jù)從第一插件A向第二插件B傳遞,我們將第一插件A作為一個事件源,第一插件A中用戶的操作作為事件,第二插件B作為事件監(jiān)聽者。當?shù)诙寮﨎被加載時,第二插件B向第一插件A注冊,注冊成功之后,一旦第一插件A中有第二插件B感興趣的事件發(fā)生,第一插件A便會將事件通知給監(jiān)聽者第二插件B。
[0007]所述的具體方法如下:
[0008]A.首先,由于第一插件A都能單獨作為產(chǎn)品,因而第一插件A判斷是否和第二插件B也存在于環(huán)境中,如果存在,則啟用相應(yīng)的功能,否則,隱藏與第二插件B相關(guān)的功能,插件ID必須是唯一的,能通過第二插件B的ID來檢測B是否存在;
[0009]B.其次,在第一插件A中定義事件源對象、事件、事件監(jiān)聽器接口 ;
[0010](a).定義事件源對象:事件源對象提供對監(jiān)聽對象管理,包括監(jiān)聽器對象的注冊方法,注銷方法,以及將事件通知給監(jiān)聽器,事件源維護了一個監(jiān)聽者隊列,所有監(jiān)聽者都需要向事件源注冊,加入該隊列,當監(jiān)聽者不再監(jiān)聽事件時,便向事件源注銷,退出該隊列;
[0011](b).定義事件:事件對象包裝了事件相關(guān)的具體信息、作為參數(shù)傳遞給監(jiān)聽器,事件對象的具體信息內(nèi)容用戶可以自己定制,包含事件發(fā)生的時間,事件源對象;
[0012](c).定義事件監(jiān)聽器接口:事件監(jiān)聽器接口,所有事件監(jiān)聽者都應(yīng)該實現(xiàn)該接口,并在具體實現(xiàn)中提供相應(yīng)的事件處理方法,事件發(fā)生時,事件源便調(diào)用監(jiān)聽器接口提供的事件處理方法統(tǒng)一通知監(jiān)聽者隊列中的所有事件監(jiān)聽器對象。
[0013]C.最后,在第二插件B中實現(xiàn)監(jiān)聽器對象,監(jiān)聽器對象必須實現(xiàn)第一插件A中的事件監(jiān)聽接口,提供自身的事件處理方法,并且在第二插件B被加載時,調(diào)用第一插件A中的事件源對象類中的添加事件監(jiān)聽方法,將該監(jiān)聽器對象向第一插件A的事件源注冊。
[0014]一種采用基于事件鏈的用戶界面插件化交互方法的系統(tǒng),包括程序運行平臺和插件兩部分,所述的程序運行平臺包括應(yīng)用程序模塊、通用界面模塊、核心模塊,應(yīng)用程序模塊負責具體業(yè)務(wù)邏輯,可任意調(diào)用其他模塊,通用界面模塊負責界面,且只依賴核心模塊,核心模塊主要存放需要全局訪問的內(nèi)容,而模型集中存放數(shù)據(jù)模型,所述插件借助事件鏈的處理機制,實現(xiàn)了插件與應(yīng)用程序框架內(nèi)的各個模塊之間的接入與交互,成為應(yīng)用程序框架的擴展和補充。
[0015]所述的事件鏈的處理機制實現(xiàn)模塊與模塊之間的松耦合關(guān)系,通過建立一條事件鏈來組織請求的處理者,請求將會沿著鏈進行傳遞,請求發(fā)送者無須知道請求在何時、何處以及如何處理,實現(xiàn)了請求發(fā)送者與處理者的解耦,在系統(tǒng)中,每一個模塊都有自己的事件處理器,每個請求都會在所有的事件處理器上流轉(zhuǎn)一遍,這樣就可以通過請求來溝通各個模塊,從而避免了模塊間的跨層調(diào)用和反向調(diào)用。
[0016]本發(fā)明同現(xiàn)有技術(shù)相比,其優(yōu)點在于:
[0017]1.借助事件鏈的處理機制,通過事件鏈組織請求的處理者實現(xiàn)了請求發(fā)送者與處理者的解耦及插件與應(yīng)用程序框架內(nèi)的各個模塊之間的接入與交互,解決由于應(yīng)用程序開發(fā)過程中界面設(shè)計與程序開發(fā)無法清晰的分離,從而使得程序的調(diào)試和設(shè)計錯綜復(fù)雜,導(dǎo)致顯示與業(yè)務(wù)揉和的技術(shù)問題,實現(xiàn)界面層和業(yè)務(wù)層的分離,使插件化交互方法過程中程序與插件間正確地互相通信;
[0018]2.基于多插件化,擁有較佳的靈活性,可封裝核心數(shù)據(jù)、建立邏輯和功能的計算關(guān)系,創(chuàng)建更為穩(wěn)定的程序,并減少開發(fā)者的重復(fù)編寫代碼勞動,同時使整個應(yīng)用程序中的各個部分之間的耦合度降低,獨立性增強。
[【專利附圖】
【附圖說明】]
[0019]圖1為事件鏈的基本架構(gòu)圖;
[0020]圖2為應(yīng)用程序入口類關(guān)系圖;
[0021]圖3為應(yīng)用程序入口類關(guān)系圖;
[0022]圖4為界面模塊類圖;
[0023]圖5為Config通用配置模塊圖;
[0024]指定圖1作為本發(fā)明的摘要附圖。[【具體實施方式】]
[0025]下面結(jié)合附圖對本發(fā)明作進一步說明,這種系統(tǒng)的結(jié)構(gòu)和原理對本專業(yè)的人來說是非常清楚的。應(yīng)當理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0026]本發(fā)明的設(shè)計思路就是對眾多應(yīng)用程序的通用功能等進行抽象提煉,定義成一系列核心模塊,并采用事件鏈機制,專注于一系列核心模塊的平臺和架構(gòu)的搭建,而使單個插件的開發(fā)更多關(guān)注于自身功能的實現(xiàn),以及插件與核心平臺的對接設(shè)計上,從而不必過多的考慮與其他模塊的易融合性,從而能快速支持業(yè)務(wù)創(chuàng)新。
[0027]實現(xiàn)監(jiān)聽器對象是將兩個插件之間的調(diào)用關(guān)系通過事件機制建立起來之后,我們便可以在監(jiān)聽器和事件中添加用戶的邏輯功能。當然,上面是基于Java事件模型的一種參考實現(xiàn),開發(fā)人員也可以完全不依賴Java事件機制,所有基類都可以由用戶自己定義。
[0028]實施例1
[0029]本發(fā)明采用事件鏈機制,從而實現(xiàn)模塊與模塊之間的松耦合關(guān)系,通過建立一條事件鏈來組織請求的處理者,請求將會沿著鏈進行傳遞,請求發(fā)送者無須知道請求在何時、何處以及如何處理,實現(xiàn)了請求發(fā)送者與處理者的解耦。在系統(tǒng)中,每一個模塊都有自己的事件處理器,每個請求都會在所有的事件處理器上流轉(zhuǎn)一遍,這樣就可以通過請求來溝通各個模塊,從而避免了模塊間的跨層調(diào)用和反向調(diào)用,本質(zhì)上這種設(shè)計是通過一種隱性的綁定來松綁顯性的編譯層綁定。
[0030]如圖1所示,圖中各部分的具體解釋如下表:
[0031]
【權(quán)利要求】
1.一種基于事件鏈的用戶界面插件化交互方法,其特征在于在插件的相互通信中,數(shù)據(jù)從第一插件A向第二插件B傳遞,我們將第一插件A作為一個事件源,第一插件A中用戶的操作作為事件,第二插件B作為事件監(jiān)聽者。當?shù)诙寮﨎被加載時,第二插件B向第一插件A注冊,注冊成功之后,一旦第一插件A中有第二插件B感興趣的事件發(fā)生,第一插件A便會將事件通知給監(jiān)聽者第二插件B。
2.如權(quán)利要求1所述的一種基于事件鏈的用戶界面插件化交互方法,其特征在于所述的具體方法如下: A.首先,由于第一插件A都能單獨作為產(chǎn)品,因而第一插件A判斷是否和第二插件B也存在于環(huán)境中,如果存在,則啟用相應(yīng)的功能,否則,隱藏與第二插件B相關(guān)的功能,插件ID必須是唯一的,能通過第二插件B的ID來檢測B是否存在; B.其次,在第一插件A中定義事件源對象、事件、事件監(jiān)聽器接口; Ca).定義事件源對象:事件源對象提供對監(jiān)聽對象管理,包括監(jiān)聽器對象的注冊方法,注銷方法,以及將事件通知給監(jiān)聽器,事件源維護了一個監(jiān)聽者隊列,所有監(jiān)聽者都需要向事件源注冊,加入該隊列,當監(jiān)聽者不再監(jiān)聽事件時,便向事件源注銷,退出該隊列; (b).定義事件:事件對象包裝了事件相關(guān)的具體信息、作為參數(shù)傳遞給監(jiān)聽器,事件對象的具體信息內(nèi)容用戶可以自己定制,包含事件發(fā)生的時間,事件源對象; (c).定義事件監(jiān)聽器接口:事件監(jiān)聽器接口,所有事件監(jiān)聽者都應(yīng)該實現(xiàn)該接口,并在具體實現(xiàn)中提供相應(yīng)的事件處理方法,事件發(fā)生時,事件源便調(diào)用監(jiān)聽器接口提供的事件處理方法統(tǒng)一通知監(jiān)聽者隊列中的所有事件監(jiān)聽器對象; C.最后,在第二插件B中實現(xiàn)監(jiān)聽器對象,監(jiān)聽器對象必須實現(xiàn)第一插件A中的事件監(jiān)聽接口,提供自身的事件處理方法,并且在第二插件B被加載時,調(diào)用第一插件A中的事件源對象類中的添加事件監(jiān)聽方法,將該監(jiān)聽器對象向第一插件A的事件源注冊。
3.一種采用如權(quán)利要求1所述的基于事件鏈的用戶界面插件化交互方法的系統(tǒng),包括程序運行平臺和插件兩部分,其特征在于所述的程序運行平臺包括應(yīng)用程序模塊、通用界面模塊、核心模塊,應(yīng)用程序模塊負責具體業(yè)務(wù)邏輯,可任意調(diào)用其他模塊,通用界面模塊負責界面,且只依賴核心模塊,核心模塊主要存放需要全局訪問的內(nèi)容,而模型集中存放數(shù)據(jù)模型,所述插件借助事件鏈的處理機制,實現(xiàn)了插件與應(yīng)用程序框架內(nèi)的各個模塊之間的接入與交互,成為應(yīng)用程序框架的擴展和補充。
4.如權(quán)利要求3所述的基于事件鏈的用戶界面插件化交互系統(tǒng),其特征在于所述的事件鏈的處理機制實現(xiàn)模塊與模塊之間的松耦合關(guān)系,通過建立一條事件鏈來組織請求的處理者,請求將會沿著鏈進行傳遞,請求發(fā)送者無須知道請求在何時、何處以及如何處理,實現(xiàn)了請求發(fā)送者與處理者的解耦,在系統(tǒng)中,每一個模塊都有自己的事件處理器,每個請求都會在所有的事件處理器上流轉(zhuǎn)一遍,這樣就可以通過請求來溝通各個模塊,從而避免了模塊間的跨層調(diào)用和反向調(diào)用。
【文檔編號】G06F9/44GK103645901SQ201310689128
【公開日】2014年3月19日 申請日期:2013年12月16日 優(yōu)先權(quán)日:2013年12月16日
【發(fā)明者】章奕, 武劍鋒, 王泊, 胡漢英, 黃寅飛, 白碩 申請人:上海證券交易所