您的位置:軟件測(cè)試 > 開(kāi)源軟件測(cè)試 > 開(kāi)源軟件測(cè)試解決方案 >
一個(gè)開(kāi)源的IoC采集服務(wù)器體系結(jié)構(gòu)設(shè)計(jì)
作者:網(wǎng)絡(luò)轉(zhuǎn)載 發(fā)布時(shí)間:[ 2012/12/3 16:13:42 ] 推薦標(biāo)簽:

基于IoC思想設(shè)計(jì)的系統(tǒng)架構(gòu)

作者:成曉旭

http://blog.csdn.net/CXXSoft/

(聲明:版權(quán)保留,歡迎轉(zhuǎn)載、請(qǐng)保證文章完整性)
 

1.        引言

Java領(lǐng)域的開(kāi)發(fā)人員,可以采用spring開(kāi)源框架,快速構(gòu)建自己的業(yè)務(wù)應(yīng)有系統(tǒng),本人羨慕不已。但是在我采用的傳統(tǒng)開(kāi)發(fā)語(yǔ)言、專業(yè)應(yīng)用領(lǐng)域,都沒(méi)有這樣的好框架可以沿用。于是早有自己設(shè)計(jì)一個(gè)IoC框架,適用于本人涉及的實(shí)時(shí)監(jiān)控、通信采集領(lǐng)域。

“他山之石、可以攻玉”。其實(shí)IoC、DI等的分析、設(shè)計(jì)理論未必非要用來(lái)構(gòu)架通用的基礎(chǔ)開(kāi)發(fā)框架,在具體的應(yīng)有系統(tǒng)開(kāi)發(fā)中借用,同樣能構(gòu)建靈活的系統(tǒng)體系架構(gòu),尤其是對(duì)于企業(yè)戰(zhàn)略性的長(zhǎng)期的產(chǎn)品、系統(tǒng)的構(gòu)建,更是事半功倍。

2.        系統(tǒng)背景簡(jiǎn)介

在實(shí)時(shí)監(jiān)控、數(shù)據(jù)采集等通信類系統(tǒng)中,通常的設(shè)計(jì)都是:將數(shù)據(jù)采集或者與底層邏輯單元(比如:底層的軟件子系統(tǒng)、硬件終端、遠(yuǎn)程設(shè)備)通信的邏輯功能獨(dú)立封裝在一個(gè)子系統(tǒng)中,實(shí)現(xiàn)基礎(chǔ)通信收發(fā)、通信方式分化、通信流程控制、底層協(xié)議規(guī)整、基礎(chǔ)數(shù)據(jù)整合等網(wǎng)絡(luò)通信、數(shù)據(jù)采集職責(zé)。

本設(shè)計(jì)是針對(duì)常見(jiàn)的實(shí)時(shí)監(jiān)控、數(shù)據(jù)采集系統(tǒng)。下面以一個(gè)典型的通信采集服務(wù)器應(yīng)有為例:系統(tǒng)的底層是硬件采集設(shè)備,硬件設(shè)備完成整個(gè)系統(tǒng)與外界環(huán)境或者設(shè)備的交互;上層的軟件系統(tǒng)完成與自己硬件設(shè)備的交互,并且對(duì)采集的數(shù)據(jù)進(jìn)行分析、處理、存儲(chǔ)、與外部系統(tǒng)接口。

3.         問(wèn)題

在我工作的軟件項(xiàng)目中,類似的應(yīng)用存在于多個(gè)軟件系統(tǒng)中,雖然這些系統(tǒng)在子系統(tǒng)設(shè)計(jì)及職責(zé)劃分方面也如上圖一般進(jìn)行了明確的分層及模塊化,但在核心的“通信采集子系統(tǒng)”的設(shè)計(jì)及實(shí)現(xiàn)上存在諸多通病,導(dǎo)致整個(gè)子系統(tǒng)的可理解性、可維護(hù)性、可測(cè)試性、對(duì)需求變動(dòng)的適應(yīng)性極差。集中表現(xiàn)在:

1.      整個(gè)系統(tǒng)被設(shè)計(jì)成一個(gè)“非常龐大”的“業(yè)務(wù)調(diào)度控制類”,沒(méi)有進(jìn)行職責(zé)的拆分和封裝;

2.      在通信方式實(shí)現(xiàn)類(比如:串口通信類、語(yǔ)音卡控制類、TCP/IP通信類)中完成所有業(yè)務(wù)處理功能;(絕大多數(shù)板卡廠商Demo程序是這樣演示的,有意無(wú)意間誤導(dǎo)了很多剛剛接觸CTI、IVR系統(tǒng)開(kāi)發(fā)的入門者)

3.      對(duì)于多任務(wù)并發(fā),多個(gè)設(shè)備上、下行同時(shí)通信的管理非常復(fù)雜;

4.      對(duì)于需求變化的適應(yīng)性非常差;

5.      系統(tǒng)代碼幾乎沒(méi)有可復(fù)用性了。

4.         新問(wèn)題

針對(duì)上述問(wèn)題,總結(jié)、分析以往經(jīng)驗(yàn)和教訓(xùn),以“代碼復(fù)用”為出發(fā)點(diǎn)重新設(shè)計(jì)了通信采集系統(tǒng)體系架構(gòu),并較好地解決這些突出問(wèn)題,并梳理出大量可復(fù)用的功能代碼。詳細(xì)說(shuō)明請(qǐng)參考《一個(gè)典型的采集服務(wù)器體系結(jié)構(gòu)設(shè)計(jì)》一文:http://blog.csdn.net/cxxsoft/archive/2006/09/18/1236331.aspx。

但是,后來(lái)再次開(kāi)發(fā)通信采集服務(wù)器,以應(yīng)有于不同的業(yè)務(wù)需求時(shí),發(fā)現(xiàn)原來(lái)的架構(gòu)存在如下的典型問(wèn)題:

1、“采集控制器”幾乎不能重用、但與新開(kāi)發(fā)的采集控制模式非常相識(shí)。但是,每次新開(kāi)發(fā)的“采集控制器”邏輯都非常相識(shí),但必須修改業(yè)務(wù)采集類的類名和方法名,修改狀態(tài)機(jī)的轉(zhuǎn)換關(guān)系,修改協(xié)議調(diào)用的類名和方法名。

2、“業(yè)務(wù)采集類”的變化,會(huì)直接影響到“采集控制器”。

3、“通信協(xié)議類”的變化,會(huì)直接影響到“采集控制器”。

4、通信控制流程、時(shí)序的變化,會(huì)直接影響到“采集控制器”。并且要正確實(shí)現(xiàn)這些變化,必須在與此無(wú)關(guān)的“采集控制器”中,小心翼翼地扣代碼出來(lái)改。
5.         IoC重構(gòu)設(shè)計(jì)

         開(kāi)源的通用采集服務(wù)器,是在原有系統(tǒng)架構(gòu)的基礎(chǔ)上,增加業(yè)務(wù)抽象接口,引用IoC的設(shè)計(jì)理念,倒置交互類之間的依賴關(guān)系,采用DI來(lái)實(shí)現(xiàn)類之間的依賴關(guān)聯(lián)的動(dòng)態(tài)關(guān)聯(lián)。

1、   抽象“業(yè)務(wù)調(diào)度核心類”的核心邏輯流程,將所有類方法的調(diào)用設(shè)計(jì)成對(duì)接口方法的調(diào)用。

2、   抽象“采集控制類”的核心邏輯流程,將所有類方法的調(diào)用設(shè)計(jì)成對(duì)接口方法的調(diào)用。“采集控制器”類被設(shè)計(jì)成一個(gè)通用的“工控機(jī)主板”,只要遵循“主板”約定的接口,換插不同的“業(yè)務(wù)采集類”、“通信協(xié)議類”,可以實(shí)現(xiàn)完全不同的采集業(yè)務(wù)需求、按照完全不同的通信協(xié)議與底層模塊通信。

3、   將“采集控制類”中的狀態(tài)機(jī)管理邏輯剝離出來(lái),將狀態(tài)機(jī)檢測(cè)和控制代碼設(shè)計(jì)成對(duì)接口方法的調(diào)用。只要遵循狀態(tài)機(jī)接口,可以靈活實(shí)現(xiàn)不要業(yè)務(wù)需求的狀態(tài)轉(zhuǎn)換控制,在運(yùn)行期動(dòng)態(tài)創(chuàng)建狀態(tài)機(jī)實(shí)例,并注入到“采集控制類”,完全接觸“采集控制器”與“業(yè)務(wù)狀態(tài)機(jī)類”靜態(tài)依賴。

4、   去掉“通信適配器”、“協(xié)議適配器”,增加“通信接口”、“協(xié)議接口”和“業(yè)務(wù)接口”,按照接口要求重構(gòu)通信類、協(xié)議類、采集業(yè)務(wù)類,解決原來(lái)系統(tǒng)架構(gòu)中:新增一種通信方式、通信協(xié)議時(shí),還必須在相關(guān)的適配器中增加新類型識(shí)別代碼的設(shè)計(jì)弊端。

6.         技術(shù)基礎(chǔ)與規(guī)約

本設(shè)計(jì)的核心的設(shè)計(jì)原理:IOC容器根據(jù)反射機(jī)制動(dòng)態(tài)創(chuàng)建實(shí)現(xiàn)約定接口的業(yè)務(wù)對(duì)象,動(dòng)態(tài)注入到采集調(diào)度控制器中。采集調(diào)度控制器是一個(gè)高層次抽象的Active Class,自動(dòng)不斷地調(diào)用狀態(tài)機(jī)接口方法來(lái)執(zhí)行“業(yè)務(wù)采集類”要求的業(yè)務(wù)通信指令。

本設(shè)計(jì)的核心的重要設(shè)計(jì)約定:采集調(diào)度控制器只調(diào)用抽象的接口方法,那么具體的上層業(yè)務(wù)任務(wù),如何動(dòng)態(tài)的翻譯成具體的通信協(xié)議?又如何知道當(dāng)前的任務(wù)如何開(kāi)始,何時(shí)結(jié)束?本設(shè)計(jì)要求:業(yè)務(wù)采集類必須管理好自己的業(yè)務(wù)步驟與通信協(xié)議之間的對(duì)應(yīng)關(guān)系(確實(shí)非常難以在抽象,用動(dòng)態(tài)配置的方法使用起來(lái)反而更復(fù)雜),采集調(diào)度控制器只負(fù)責(zé)動(dòng)態(tài)建立兩者之間的運(yùn)行期對(duì)象關(guān)系。業(yè)務(wù)采集類必須實(shí)現(xiàn)采集調(diào)度控制器要求的指定接口方法,用以實(shí)現(xiàn)采集任務(wù)的發(fā)起、執(zhí)行下一條指令、結(jié)束、異常重發(fā)、異常中止、故障處理等采集流程控制功能。這正好是采集調(diào)度控制器高層抽象的價(jià)值和通用性的設(shè)計(jì)基礎(chǔ)。

框架使用者只需按照接口約定,編碼實(shí)現(xiàn)具體業(yè)務(wù)需求的相關(guān)采集、狀態(tài)機(jī)、協(xié)議業(yè)務(wù)類;在配置這些類的運(yùn)行期參數(shù),采集服務(wù)器大功告成。采集服務(wù)器在允許時(shí),會(huì)自動(dòng)加載配置參數(shù),動(dòng)態(tài)創(chuàng)建相關(guān)的業(yè)務(wù)邏輯對(duì)象,并完成依賴注入,整個(gè)系統(tǒng)能按具體的業(yè)務(wù)要求完成通信、采集任務(wù)。

7.         采集服務(wù)器設(shè)計(jì)

           通信采集服務(wù)器是常常是實(shí)時(shí)監(jiān)控、數(shù)據(jù)采集類系統(tǒng)的核心,實(shí)現(xiàn)與底層的軟件子系統(tǒng)、硬件終端、遠(yuǎn)程設(shè)備的通信、下行命令的執(zhí)行、上行數(shù)據(jù)的接收、協(xié)議解析,并且完成業(yè)務(wù)數(shù)據(jù)的分析以及顯示驅(qū)動(dòng)。它既是系統(tǒng)的通信樞紐,也是業(yè)務(wù)核心。

上一頁(yè)12下一頁(yè)
軟件測(cè)試工具 | 聯(lián)系我們 | 投訴建議 | 誠(chéng)聘英才 | 申請(qǐng)使用列表 | 網(wǎng)站地圖
滬ICP備07036474 2003-2017 版權(quán)所有 上海澤眾軟件科技有限公司 Shanghai ZeZhong Software Co.,Ltd