本發(fā)明實(shí)施例涉及計(jì)算機(jī)技術(shù),尤其涉及一種描述與集成軟件服務(wù)的方法和系統(tǒng)。
背景技術(shù):
在軟件集成相關(guān)開發(fā)中,以下問題是常見的:
(1)為提供某種業(yè)務(wù)服務(wù),可能要用到一種或多種硬件。同一類硬件可能有多個(gè)供應(yīng)商,甚至同一個(gè)供應(yīng)商有同類硬件多個(gè)規(guī)格的產(chǎn)品形成的產(chǎn)品線,雖然在具體標(biāo)準(zhǔn)、實(shí)現(xiàn)方式、數(shù)據(jù)格式、性能、配置、獨(dú)特功能、軟件調(diào)用接口上有差異,(其中有些差異可能與其依賴的硬件、操作系統(tǒng)相關(guān)),但是它們都提供大致相同的功能。
(2)同一類提供大致相同功能的軟件組件,類似于上述情形,但其實(shí)現(xiàn)方式、數(shù)據(jù)格式、配置、調(diào)用接口可能都不一樣。
(3)有些供應(yīng)商會(huì)提供多種服務(wù),這些服務(wù)需要被統(tǒng)一控制,如登入、登出,但這些服務(wù)可能被不同的業(yè)務(wù)全部引用或僅部分引用。
(4)在為客戶做定制開發(fā)時(shí),考慮到成本、合作等因素,可能要在某基礎(chǔ)版本上更改硬件或軟件供應(yīng)商,因其調(diào)用接口等與此前所用的差異,直接使用供應(yīng)商提供的調(diào)用接口通常會(huì)導(dǎo)致較多的修改才能重新上線。
(5)要遷移到不同的操作系統(tǒng)平臺(tái)時(shí),通常也會(huì)導(dǎo)致一些修改。
因此,基于以上問題,大大增加了軟件集成開發(fā)的時(shí)間和成本。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種描述與集成軟件服務(wù)的方法和系統(tǒng),以減少軟件集成開發(fā)的時(shí)間和成本。
第一方面,本發(fā)明實(shí)施例提供了一種描述與集成軟件服務(wù)的方法,包括:
確定要集成的多個(gè)軟件服務(wù)及該多個(gè)軟件服務(wù)之間的調(diào)用順序;
通過預(yù)先定義的模塊接口、驅(qū)動(dòng)接口和邏輯處理接口,將所述多個(gè)軟件服務(wù)分別包裝實(shí)現(xiàn)為對(duì)應(yīng)的模塊、驅(qū)動(dòng)和邏輯處理;
通過模塊鏈接口將所述多個(gè)模塊生成模塊鏈,并生成該模塊鏈的配置文件;
應(yīng)用時(shí),所述配置文件用于外部系統(tǒng)加載,外部系統(tǒng)根據(jù)該配置文件創(chuàng)建所述模塊、驅(qū)動(dòng)、邏輯處理和模塊鏈的實(shí)例,運(yùn)行所述實(shí)例以便實(shí)現(xiàn)相應(yīng)的軟件服務(wù)。
第二方面,本發(fā)明實(shí)施例提供了一種描述與集成軟件服務(wù)的系統(tǒng),包括:
模塊接口,該模塊接口是對(duì)硬件或軟件組件的抽象,分割為與驅(qū)動(dòng)相關(guān)的成分和與驅(qū)動(dòng)無關(guān)的成分,以描述所述組件的規(guī)格,其中,與驅(qū)動(dòng)無關(guān)的成分包括屬性、功能和處理邏輯;
驅(qū)動(dòng)接口,用于包裝供應(yīng)商的產(chǎn)品特性及與操作系統(tǒng)相關(guān)的成分,用于管理底層驅(qū)動(dòng)封裝實(shí)例,或?qū)Χ鄠€(gè)服務(wù)的統(tǒng)一控制;
邏輯處理接口,該邏輯處理接口是邏輯處理的統(tǒng)一接口,用于實(shí)現(xiàn)所述多個(gè)模塊中的各種數(shù)據(jù)處理;
模塊鏈接口,用于管理相互之間有數(shù)據(jù)傳輸處理邏輯關(guān)系的模塊,描述并固化模塊間的數(shù)據(jù)和控制的傳遞及調(diào)用順序,將所述多個(gè)模塊按照鏈表的形式串接起來。
本發(fā)明實(shí)施例通過預(yù)先封裝和定義模塊接口、驅(qū)動(dòng)接口、邏輯處理接口和模塊鏈接口,實(shí)現(xiàn)一致地對(duì)待各種功能調(diào)用特別是一致地對(duì)待操作系統(tǒng)調(diào)用、一致地對(duì)待硬件或軟件組件中的邏輯處理,一致地對(duì)待同一類硬件或軟件組件,一致地對(duì)待不同的硬件或軟件組件,可以完整地解決現(xiàn)有技術(shù)中的問題,從而最小化相關(guān)開發(fā)的時(shí)間和成本。
附圖說明
圖1是本發(fā)明實(shí)施例一中的描述與集成軟件服務(wù)的方法的流程圖;
圖2是本發(fā)明實(shí)施例二中的描述與集成軟件服務(wù)的系統(tǒng)的結(jié)構(gòu)框圖。
具體實(shí)施方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的詳細(xì)說明??梢岳斫獾氖牵颂幩枋龅木唧w實(shí)施例僅僅用于解釋本發(fā)明,而非對(duì)本發(fā)明的限定。另外還需要說明的是,為了便于描述,附圖中僅示出了與本發(fā)明相關(guān)的部分而非全部結(jié)構(gòu)。
實(shí)施例一
圖1為本發(fā)明實(shí)施例一提供的一種描述與集成軟件服務(wù)的方法的流程圖,如圖所示,具體包括如下步驟:
s101、確定要集成的多個(gè)軟件服務(wù)及該多個(gè)軟件服務(wù)之間的調(diào)用順序;
s102、通過預(yù)先定義的模塊接口、驅(qū)動(dòng)接口和邏輯處理接口,將所述多個(gè)軟件服務(wù)分別包裝實(shí)現(xiàn)為對(duì)應(yīng)的模塊、驅(qū)動(dòng)和邏輯處理;
s103、通過模塊鏈接口將所述多個(gè)模塊生成模塊鏈,并生成該模塊鏈的配置文件;
其中,所述配置文件用于外部系統(tǒng)加載,外部系統(tǒng)根據(jù)該配置文件創(chuàng)建所述模塊、驅(qū)動(dòng)、邏輯處理和模塊鏈的實(shí)例,運(yùn)行所述實(shí)例以便實(shí)現(xiàn)相應(yīng)的軟件服務(wù)。
具體的,多個(gè)軟件服務(wù)可以構(gòu)成一種業(yè)務(wù),這里的業(yè)務(wù)可以是指不同行業(yè)、不同領(lǐng)域中涉及到的業(yè)務(wù),例如銀行領(lǐng)域中的余額查詢、刷卡轉(zhuǎn)賬;醫(yī)療領(lǐng)域中的排隊(duì)掛號(hào)、預(yù)約體檢;酒店領(lǐng)域中的辦理入住、空房查詢等。每一種業(yè)務(wù)包含至少一個(gè)業(yè)務(wù)狀態(tài),每一種業(yè)務(wù)狀態(tài)可包含一種或多種不同的服務(wù),這些狀態(tài)及狀態(tài)間的切換構(gòu)成了一套業(yè)務(wù)流程。
這里以銀行大堂服務(wù)機(jī)器人提供的查詢銀行卡余額業(yè)務(wù)為例來進(jìn)行說明,并且該類機(jī)器人內(nèi)安裝了為完成該業(yè)務(wù)所需的顯示器、觸摸屏、多合一銀行卡讀卡器、密碼鍵盤及網(wǎng)絡(luò)等基礎(chǔ)設(shè)施。
用戶要進(jìn)行余額查詢,正常情況下需要進(jìn)行下列操作,即業(yè)務(wù)流程:
(1)通過語音交互或點(diǎn)觸觸摸屏,進(jìn)入余額查詢ui。
(2)根據(jù)語音或指示燈提示插入銀行卡。
(3)根據(jù)語音或指示燈提示輸入密碼。
(4)提交查詢余額交易請(qǐng)求。
(5)查詢余額結(jié)束后,取走銀行卡。
相應(yīng)地,機(jī)器人應(yīng)完成下列各項(xiàng):
(0)視頻監(jiān)控機(jī)器人前方指定區(qū)域。
(1)切換到查詢銀行卡余額業(yè)務(wù)ui。初始化讀卡器、密碼鍵盤等,若初始化失敗則告知后臺(tái),并應(yīng)提示用戶。
(2)讀卡器試圖讀取銀行卡中的信息,若成功,則提取其中部分信息,加工后呈現(xiàn)給用戶或保存起來以備后續(xù)步驟使用;否則告知后臺(tái),并應(yīng)提示用戶。
(3)密碼鍵盤試圖獲取用戶輸入的密碼,若成功,則提取其中部分信息,加工后呈現(xiàn)給用戶或保存起來以備后續(xù)步驟使用;否則告知后臺(tái),并應(yīng)提示用戶。
(4)將必要的終端信息、保存的銀行卡信息、密碼以及交易類型(查詢余額),打包為服務(wù)請(qǐng)求,發(fā)送給交易后臺(tái)并等待結(jié)果。拿到結(jié)果后,呈現(xiàn)給用戶。
(5)查詢余額結(jié)束后,讀卡器彈出銀行卡并提示用戶取走銀行卡。
(6)ui切換到首頁。
那么在上述例子中,觸摸屏、銀行卡讀卡器或密碼鍵盤等,都提供了相應(yīng)的軟件服務(wù)。在實(shí)現(xiàn)一個(gè)業(yè)務(wù)流程過程中,需要描述與實(shí)現(xiàn)不同的軟件服務(wù),而多個(gè)軟件服務(wù)之間的調(diào)用順序是根據(jù)業(yè)務(wù)流程確定。
所述模塊接口、驅(qū)動(dòng)接口、邏輯處理接口和模塊鏈接口都是預(yù)先封裝定義好的,用于一致地對(duì)待各種功能調(diào)用特別是一致地對(duì)待操作系統(tǒng)調(diào)用、一致地對(duì)待硬件或軟件組件中的邏輯處理,一致地對(duì)待同一類硬件或軟件組件,一致地對(duì)待不同的硬件或軟件組件。接下來對(duì)這些接口分別進(jìn)行詳細(xì)描述:
1、模塊接口
模塊接口是對(duì)硬件或軟件組件的抽象,通過模塊接口可以將多個(gè)軟件服務(wù)包裝實(shí)現(xiàn)為對(duì)應(yīng)的模塊。
具體地,根據(jù)組件的不同需求,模塊接口(moduleinterface)可以分割為與驅(qū)動(dòng)相關(guān)的成分和與驅(qū)動(dòng)無關(guān)的成分,以描述所述組件的規(guī)格,可視為系統(tǒng)內(nèi)部的基本計(jì)算單元。上述與驅(qū)動(dòng)相關(guān)的成分通過關(guān)聯(lián)一個(gè)驅(qū)動(dòng)接口(driverinterface)來實(shí)現(xiàn),但對(duì)某些軟件組件,前者可能不需要;與驅(qū)動(dòng)無關(guān)的成分包括屬性、功能和處理邏輯,其中,屬性通過基類接口(baseinterface)中的getproperty(獲取屬性)和setproperty(設(shè)置屬性)訪問,并在配置文件中指定初始的屬性值;功能通過另一個(gè)基類接口(controlinterface)中的配置函數(shù)ioctl(ioctl是i/ocontrol的簡(jiǎn)寫,是controlinterface中提供的一個(gè)函數(shù))訪問,并在配置文件中列出該組件對(duì)外部可見的功能集;處理邏輯由關(guān)聯(lián)的2個(gè)邏輯處理隊(duì)列(callbackqueue)(prevcallbackqueue和nextcallbackqueue)實(shí)現(xiàn),可以為模塊(module)實(shí)現(xiàn)處理無輸入、一種輸入數(shù)據(jù)或多種輸入數(shù)據(jù)和無輸出、一種輸出、多種輸出數(shù)據(jù)的邏輯處理(callback),每個(gè)module根據(jù)自己的處理邏輯添加callback到其prevcallbackqueue,并在有上游module時(shí)設(shè)置為上游module的nextcallback;nextcallbackqueue用于模塊鏈(modulelink)里調(diào)用下游的module。這樣,外部系統(tǒng)可以以工廠的方式一致的方式創(chuàng)建相關(guān)模塊、用一致的方式訪問各供應(yīng)商的同類軟件產(chǎn)品功能和/或服務(wù)。模塊可分為source(作為modulelink里的最上游模塊)、destination(作為modulelink里的尾端模塊)、transform(非最上游且非尾端模塊)和repeater(用于監(jiān)控其他模塊的模塊)這幾類。
module可實(shí)現(xiàn)為插件,發(fā)布時(shí)應(yīng)提供一個(gè)實(shí)例配置文件模板,例如xml形式的模塊配置文件。
moduleinterface提供基本屬性包括:
在模塊鏈中扮演的角色(源、轉(zhuǎn)換、目的、中繼器),
i/o數(shù)據(jù)類型,
分配器,
緩沖區(qū)的最大長(zhǎng)度/前綴長(zhǎng)度/個(gè)數(shù),
共享分配器時(shí)下游模塊是否修改數(shù)據(jù),
同一種模塊可同步處理的最大個(gè)數(shù)。
提供以下方法:
open,打開;
close,關(guān)閉;
addcallback,添加邏輯處理回調(diào)函數(shù);
removecallback,刪除邏輯處理回調(diào)函數(shù)。
2、模塊鏈接口
模塊鏈接口用于管理相互之間有數(shù)據(jù)傳輸處理邏輯關(guān)系的模塊,描述并固化模塊間的數(shù)據(jù)和控制的傳遞及調(diào)用順序,將所述多個(gè)模塊按照鏈表的形式串接起來。根據(jù)模塊鏈接口將所述多個(gè)模塊生成模塊鏈。
具體的,下游模塊的輸入數(shù)據(jù)類型應(yīng)與其上游模塊的輸出數(shù)據(jù)類型匹配,在需要監(jiān)控的模塊后插入repeater模塊并由repeater模塊將監(jiān)控結(jié)果發(fā)送給外部系統(tǒng)進(jìn)行綜合分析處理,以統(tǒng)一對(duì)上層形成服務(wù)能力。特別地,一個(gè)模塊鏈可以僅包含一個(gè)模塊。這樣就實(shí)現(xiàn)了對(duì)若干個(gè)供應(yīng)商提供的若干個(gè)服務(wù)的集成,可以用完全一致的方式管理和訪問各個(gè)模塊,而且這種集成顯然可以被復(fù)用。
同樣的,模塊鏈發(fā)布時(shí)應(yīng)提供一個(gè)實(shí)例配置文件模板,例如xml形式的模塊鏈配置文件,用于配置各模塊之間的執(zhí)行邏輯以及基本的配置信息。應(yīng)用時(shí),所述配置文件用于外部系統(tǒng)加載,外部系統(tǒng)根據(jù)該配置文件創(chuàng)建所述模塊、驅(qū)動(dòng)、邏輯處理和模塊鏈的實(shí)例,運(yùn)行所述實(shí)例以便實(shí)現(xiàn)相應(yīng)的軟件服務(wù)。
modulelinkinterface提供基本屬性包括:
inherent,固有;
autorun,在初始化中open后立即run;
depth,鏈的深度。
提供以下方法:
addmodule,添加模塊到模塊鏈;
removemodule,按照模塊名稱從模塊鏈移除模塊;
findmodulebyname,按照模塊名稱從模塊鏈查找模塊;
findmodulebytype,按照模塊類型從模塊鏈查找模塊。
3、驅(qū)動(dòng)接口
驅(qū)動(dòng)接口用于包裝供應(yīng)商的產(chǎn)品特性及與操作系統(tǒng)相關(guān)的成分,用于管理底層驅(qū)動(dòng)封裝實(shí)例,或?qū)Χ鄠€(gè)服務(wù)的統(tǒng)一控制。
通過驅(qū)動(dòng)接口(driverinterface),包裝供應(yīng)商的產(chǎn)品特性及與操作系統(tǒng)相關(guān)的成分,可以調(diào)用oshal(osandhardwareabstractlayer)組件,將功能調(diào)用接口的特性及對(duì)多個(gè)服務(wù)的統(tǒng)一控制放置在配置文件中描述并在具體實(shí)例中實(shí)現(xiàn),從而屏蔽了硬件、操作系統(tǒng)、軟件規(guī)格的差異。其中,oshal是外部系統(tǒng)的硬件抽象層,oshal通過標(biāo)準(zhǔn)c++及boost等開源庫實(shí)現(xiàn)操作系統(tǒng)和硬件抽象,支持linux/windows/android等主流操作系統(tǒng)平臺(tái)。
驅(qū)動(dòng)接口實(shí)現(xiàn)為插件,發(fā)布時(shí)應(yīng)提供一個(gè)實(shí)例配置文件模板,例如xml形式的驅(qū)動(dòng)實(shí)例配置文件。
具體的,driverinterface可提供基本屬性包括:
information,驅(qū)動(dòng)信息;
onread,讀回調(diào)函數(shù);
onwrite,寫回調(diào)函數(shù);
protocol,需要的協(xié)議。
同時(shí),可提供以下方法:
read,從底層驅(qū)動(dòng)中讀取數(shù)據(jù);
write,寫數(shù)據(jù)到底層驅(qū)動(dòng)中;
ioctl,i/o控制,如配置參數(shù)到驅(qū)動(dòng),讀取狀態(tài)等;
open,根據(jù)輸入?yún)?shù)打開底層驅(qū)動(dòng);
close,根據(jù)輸入?yún)?shù)關(guān)閉底層驅(qū)動(dòng)。
根據(jù)driverinterface實(shí)現(xiàn)驅(qū)動(dòng)可采用如下步驟:
(1)收集軟件產(chǎn)品可能用到的功能和/或服務(wù)并分類為全體公共的、部分公共的、特有的,相關(guān)的數(shù)據(jù)格式,以及這些軟件產(chǎn)品的基本信息如描述、提供商、版本號(hào)等。
(2)對(duì)供應(yīng)商的每一個(gè)同類軟件產(chǎn)品,創(chuàng)建一個(gè)實(shí)現(xiàn)driverinterface的具體驅(qū)動(dòng)類。
(3)將軟件產(chǎn)品的基本信息,及功能和/或服務(wù)中關(guān)于屬性獲取或設(shè)置分別在其getproperty/setproperty中實(shí)現(xiàn),獲取對(duì)應(yīng)于getproperty,設(shè)置對(duì)應(yīng)于setproperty,且屬性要公開其編號(hào)和數(shù)據(jù)格式。
(4)將這些功能和/或服務(wù)中,用于初始化的,在其open中實(shí)現(xiàn);用于反初始化的,在其close中實(shí)現(xiàn)。
(5)將這些功能和/或服務(wù)中,用于讀數(shù)據(jù)的,在其read中實(shí)現(xiàn);用于寫數(shù)據(jù)的,在其write中實(shí)現(xiàn)。
(6)其他功能和/或服務(wù),在其ioctl中實(shí)現(xiàn),且要公開各控制命令和數(shù)據(jù)格式。
(7)在需要引用相關(guān)功能和/或服務(wù)時(shí),創(chuàng)建對(duì)應(yīng)具體驅(qū)動(dòng)類的實(shí)例并調(diào)用相關(guān)功能和/或服務(wù)。
4、邏輯處理接口
邏輯處理接口是邏輯處理的統(tǒng)一接口,用于實(shí)現(xiàn)所述多個(gè)模塊中的各種數(shù)據(jù)處理。實(shí)現(xiàn)為插件,發(fā)布時(shí)應(yīng)提供一個(gè)實(shí)例配置文件模板,例如xml形式的邏輯處理實(shí)例配置文件。
callbackinterface提供下列方法:
callback,回調(diào)接口的實(shí)現(xiàn)函數(shù);
settype,設(shè)置回調(diào)的輸入輸出數(shù)據(jù)類型;
gettype,獲得回調(diào)的輸入輸出數(shù)據(jù)類型;
isready,回調(diào)處理是否準(zhǔn)備好。
callbackqueueinterface提供下列方法:
addcallback,添加callback到隊(duì)列中;
removecallback,從隊(duì)列中移除callbackinterface的指針;
findcallback,根據(jù)輸入?yún)?shù),獲取與key匹配的callback,第一個(gè)或下一個(gè)callback。
本發(fā)明實(shí)施例通過預(yù)先封裝和定義模塊接口、驅(qū)動(dòng)接口、邏輯處理接口和模塊鏈接口,實(shí)現(xiàn)一致地對(duì)待各種功能調(diào)用特別是一致地對(duì)待操作系統(tǒng)調(diào)用、一致地對(duì)待硬件或軟件組件中的邏輯處理,一致地對(duì)待同一類硬件或軟件組件,一致地對(duì)待不同的硬件或軟件組件,可以完整地解決現(xiàn)有技術(shù)中的問題,從而最小化相關(guān)開發(fā)的時(shí)間和成本。
實(shí)施例二
圖2為本發(fā)明實(shí)施例二提供的一種描述與集成軟件服務(wù)的系統(tǒng)的結(jié)構(gòu)框圖,如圖2所示,本發(fā)明實(shí)施例二的系統(tǒng)具體包括:
模塊接口,該模塊接口是對(duì)硬件或軟件組件的抽象,分割為與驅(qū)動(dòng)相關(guān)的成分和與驅(qū)動(dòng)無關(guān)的成分,以描述組件的規(guī)格,其中,與驅(qū)動(dòng)無關(guān)的成分包括屬性、功能和處理邏輯;
驅(qū)動(dòng)接口,用于包裝供應(yīng)商的產(chǎn)品特性及與操作系統(tǒng)相關(guān)的成分,用于管理底層驅(qū)動(dòng)封裝實(shí)例,或?qū)Χ鄠€(gè)服務(wù)的統(tǒng)一控制;
邏輯處理接口,該邏輯處理接口是邏輯處理的統(tǒng)一接口,用于實(shí)現(xiàn)所述多個(gè)模塊中的各種數(shù)據(jù)處理;
模塊鏈接口,用于管理相互之間有數(shù)據(jù)傳輸處理邏輯關(guān)系的模塊,描述并固化模塊間的數(shù)據(jù)和控制的傳遞及調(diào)用順序,將所述多個(gè)模塊按照鏈表的形式串接起來。
本發(fā)明實(shí)施例提供的描述與集成軟件服務(wù)的系統(tǒng)可執(zhí)行本發(fā)明任意實(shí)施例提供的描述與集成軟件服務(wù)的方法,具備執(zhí)行方法相應(yīng)的功能模塊和有益效果。
注意,上述僅為本發(fā)明的較佳實(shí)施例及所運(yùn)用技術(shù)原理。本領(lǐng)域技術(shù)人員會(huì)理解,本發(fā)明不限于這里所述的特定實(shí)施例,對(duì)本領(lǐng)域技術(shù)人員來說能夠進(jìn)行各種明顯的變化、重新調(diào)整和替代而不會(huì)脫離本發(fā)明的保護(hù)范圍。因此,雖然通過以上實(shí)施例對(duì)本發(fā)明進(jìn)行了較為詳細(xì)的說明,但是本發(fā)明不僅僅限于以上實(shí)施例,在不脫離本發(fā)明構(gòu)思的情況下,還可以包括更多其他等效實(shí)施例,而本發(fā)明的范圍由所附的權(quán)利要求范圍決定。