雷 洋
?
一種基于可擴展標(biāo)記語言的軟件系統(tǒng)解耦合設(shè)計方法研究
雷 洋
南京模擬技術(shù)研究所,江蘇 南京 210016
軟件系統(tǒng)的解耦合設(shè)計是軟件系統(tǒng)具備高可擴展性、高維護性的基礎(chǔ)設(shè)計之一,因此如何建立軟件系統(tǒng)的解耦合結(jié)構(gòu)是軟件系統(tǒng)設(shè)計的重點關(guān)鍵技術(shù)之一,尤其是大型軟件系統(tǒng)。通過使用可擴展標(biāo)記語言(Extensible Markup Language,XML),提供一種系統(tǒng)解耦合的設(shè)計方法。此方法在模塊化系統(tǒng)設(shè)計的基礎(chǔ)上,設(shè)計了一種軟件系統(tǒng)模塊開發(fā)的接口標(biāo)準(zhǔn),建立了一套軟件系統(tǒng)解耦合的系統(tǒng)結(jié)構(gòu)。將此方法應(yīng)用于系統(tǒng)的開發(fā)過程增強了系統(tǒng)在應(yīng)用邏輯擴展過程中的友好性和易用性。
系統(tǒng)解耦合;軟件系統(tǒng);系統(tǒng)設(shè)計;可擴展標(biāo)記語言
解耦合設(shè)計是基于高內(nèi)聚松耦合的理念對系統(tǒng)進行設(shè)計的過程。內(nèi)聚是一個模塊內(nèi)各個元素彼此結(jié)合的緊密程度;耦合是一個系統(tǒng)結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量。解耦合設(shè)計過程是讓一個完整系統(tǒng)的模塊與模塊之間盡可能地獨立存在。也就是說,讓每個模塊盡可能地獨立完成某個特定子功能,而模塊與模塊之間的接口盡量少而簡單。如果某兩個模塊間的關(guān)系比較復(fù)雜,最好首先考慮進一步的模塊劃分,這樣有利于修改和組合。軟件系統(tǒng)的解耦合設(shè)計是軟件系統(tǒng)開發(fā)必須考慮的設(shè)計理念之一,也是軟件質(zhì)量保證的基礎(chǔ)之一。
可擴展標(biāo)記語言(Extensible Markup Language,XML),是用于標(biāo)記電子文件使其具有結(jié)構(gòu)性的標(biāo)記語言,可以用來標(biāo)記數(shù)據(jù)、定義數(shù)據(jù)類型,是一種允許用戶對自己的標(biāo)記語言進行定義的源語言。XML是標(biāo)準(zhǔn)通用標(biāo)記語言(SGML)的子集,非常適合Web傳輸。XML提供統(tǒng)一的方法來描述和交換獨立于應(yīng)用程序或供應(yīng)商的結(jié)構(gòu)化數(shù)據(jù)。XML的核心是數(shù)據(jù),重點在于數(shù)據(jù)的內(nèi)容。XML的簡單使其易于在任何應(yīng)用程序中讀寫數(shù)據(jù),這使XML很快成為數(shù)據(jù)交換的唯一公共語言。XML還是一種元標(biāo)注語言,即定義了用于定義其他特定領(lǐng)域有關(guān)語義的、結(jié)構(gòu)化的標(biāo)記語言。這些標(biāo)記語言將文檔分成許多部件并對這些部件加以標(biāo)識。本文主要關(guān)注XML的數(shù)據(jù)特性,不對XML的上述特性展開分析。
XML基于數(shù)據(jù)的特性使其成為跨平臺、跨應(yīng)用、跨模塊交互的一種優(yōu)質(zhì)媒介。本文定義接口標(biāo)準(zhǔn)中XML文件的格式標(biāo)準(zhǔn)就是利用該特性建立系統(tǒng)的交互橋梁。
接口標(biāo)準(zhǔn)是一套模塊與模塊、模塊與框架、系統(tǒng)應(yīng)用與系統(tǒng)框架之間的通信與交互的約束規(guī)范,同時建立一種系統(tǒng)結(jié)構(gòu)用于該標(biāo)準(zhǔn)的具體應(yīng)用。系統(tǒng)內(nèi)部可以通過接口標(biāo)準(zhǔn)實現(xiàn)模塊封裝;系統(tǒng)框架可以通過接口標(biāo)準(zhǔn)建立模塊與模塊之間的通信與交互;系統(tǒng)應(yīng)用之間可以通過接口標(biāo)準(zhǔn)建立溝通和調(diào)用框架。
接口標(biāo)準(zhǔn)定義了一系列系統(tǒng)用于模塊間如何進行調(diào)用、交互和數(shù)據(jù)傳輸?shù)募s束,最終是XML文件的表現(xiàn)形式。接口標(biāo)準(zhǔn)主要由四部分組成:面向功能的接口標(biāo)準(zhǔn)、面向調(diào)用的接口標(biāo)準(zhǔn)、面向框架的接口標(biāo)準(zhǔn)及XML格式標(biāo)準(zhǔn),如圖1所示。
圖1 接口標(biāo)準(zhǔn)
2.1.1 面向功能的接口標(biāo)準(zhǔn)
面向功能的接口標(biāo)準(zhǔn)定義了一系列的模塊功能封裝約束條件,用于開發(fā)者封裝模塊功能。用戶按照接口標(biāo)準(zhǔn)封裝各個功能,并通過面向調(diào)用的接口標(biāo)準(zhǔn)中定義的邏輯方法進行使用完成功能的調(diào)用。約束條件包括了以下方面。
(1)ID唯一性約束:模塊的ID和模塊內(nèi)功能ID的定制規(guī)范,用于系統(tǒng)標(biāo)識該基本功能;(2)描述性約束:功能描述的編寫規(guī)范;(3)輸入約束:功能輸入?yún)?shù)獲取的規(guī)范;(4)輸出約束:功能輸出參數(shù)獲取的規(guī)范;(5)執(zhí)行約束:功能的執(zhí)行規(guī)范;(6)執(zhí)行結(jié)果約束:功能的獲取執(zhí)行結(jié)果的規(guī)范。
2.1.2 面向調(diào)用的接口標(biāo)準(zhǔn)
面向調(diào)用的接口標(biāo)準(zhǔn)定義了一系列的模塊封裝約束條件,用于開發(fā)者封裝模塊。用戶按照接口標(biāo)準(zhǔn)封裝各個模塊,并通過框架接口按照面向調(diào)用的接口標(biāo)準(zhǔn)中定義的邏輯方法使用,完成各個模塊內(nèi)功能的調(diào)用。約束條件包括了以下幾個方面。
(1)模塊類型定義:模塊的類型和ID的寫入規(guī)范;(2)模塊生命周期約束:模塊對應(yīng)的封裝類實例從創(chuàng)建、使用、銷毀全過程的生命周期管理規(guī)范;(3)模塊功能生命周期約束:模塊功能對應(yīng)的封裝類實例從創(chuàng)建、使用、銷毀全過程的生命周期管理規(guī)范;(4)XML文件導(dǎo)出約束:模塊以及模塊功能XML文件導(dǎo)出規(guī)范。
2.1.3 面向框架的接口標(biāo)準(zhǔn)
面向框架的接口標(biāo)準(zhǔn)定義了一系列的模塊功能調(diào)用、模塊管理的約束條件,用于系統(tǒng)框架對各個模塊功能進行整合。系統(tǒng)通過面向框架的接口標(biāo)準(zhǔn)管理、調(diào)用各個模塊。約束條件包括了以下方面。
(1)框架調(diào)用模塊功能約束:框架調(diào)用模塊功能的方法;(2)系統(tǒng)各個模塊管理約束:各個模塊的管理約束條件。
通過上述接口標(biāo)準(zhǔn)的定義,系統(tǒng)框架、模塊之間、外部程序通過接口調(diào)用而非函數(shù)調(diào)用實現(xiàn)對模塊以及模塊內(nèi)部功能的調(diào)用。需要特別指出的是,系統(tǒng)調(diào)用的接口并非傳統(tǒng)意義上的模塊接口文件,而是根據(jù)上述接口標(biāo)準(zhǔn)生成的接口文件,該接口文件采用規(guī)范約束的方法進行定義,在系統(tǒng)規(guī)劃完成之后并不會隨著系統(tǒng)需求的改變而改變。接口文件結(jié)合XML文件的使用實現(xiàn)了當(dāng)功能模塊發(fā)生變化時,系統(tǒng)各個模塊的銜接接口不會隨之變動,這一特征正是松耦合、高內(nèi)聚要求的關(guān)鍵特征。
軟件系統(tǒng)模塊化開發(fā)過程中難以避免模塊間的嵌套調(diào)用,不良的嵌套調(diào)用、復(fù)雜的嵌套關(guān)系往往是導(dǎo)致系統(tǒng)崩潰和難以維護的根源之一。需求的不斷更新也是系統(tǒng)開發(fā)過程中經(jīng)常遇到的問題。需求的變更面臨著系統(tǒng)功能和結(jié)構(gòu)的變化,反復(fù)的模塊接口變更會帶來系統(tǒng)開發(fā)的不確定性。
圖2 系統(tǒng)模塊的封裝與生成
如圖2所示,系統(tǒng)模塊開發(fā)過程中,開發(fā)者利用接口標(biāo)準(zhǔn)對系統(tǒng)模塊進行封裝,生成系統(tǒng)模塊的封裝類和模塊功能的封裝類。封裝類的實例化過程和調(diào)用被隱藏在具體的接口實現(xiàn)類中,而模塊之間、模塊與框架之間的調(diào)用通過標(biāo)準(zhǔn)接口進行,實現(xiàn)模塊對外接口在開發(fā)過程中的一致性需求,降低了開發(fā)過程中需求變更對系統(tǒng)各個接口變動帶來的影響。
圖3 接口、實現(xiàn)類之間關(guān)系圖
圖3描述了接口與接口、接口和實現(xiàn)類之間的關(guān)系。頂層框架接口的實現(xiàn)類包含了模塊調(diào)用接口和模塊功能接口。實現(xiàn)類通過調(diào)用上述兩個接口完成對系統(tǒng)各個模塊和模塊功能的調(diào)用,面向系統(tǒng)的則是頂層的框架接口。模塊封裝基類包含模塊功能接口,各個模塊通過繼承該基類實現(xiàn)對模塊的封裝,各模塊的封裝類中包含了模塊內(nèi)功能封裝類。功能封裝基類實現(xiàn)對模塊各個功能的封裝,模塊內(nèi)各個功能通過集成該基類實現(xiàn)對模塊功能的封裝,模塊內(nèi)功能最終通過模塊功能接口被外部調(diào)用。
通過標(biāo)準(zhǔn)接口、封裝基類的泛化和封裝類之間的組合過程,在系統(tǒng)中建立一套模塊之間的通信和交互方法,實現(xiàn)系統(tǒng)各個模塊之間的松耦合設(shè)計。對于系統(tǒng)框架以外的應(yīng)用,開發(fā)者可通過XML文檔描述標(biāo)準(zhǔn)進行二次封裝實現(xiàn)讀取系統(tǒng)內(nèi)部功能,為開發(fā)可視化的功能邏輯編輯提供技術(shù)實現(xiàn)的基礎(chǔ)。
軟件系統(tǒng)通常由多個系統(tǒng)級模塊構(gòu)成,并通過系統(tǒng)邏輯將模塊串聯(lián)起來,從而實現(xiàn)系統(tǒng)功能,但是系統(tǒng)邏輯隨著用戶需求和系統(tǒng)功能的變化需要不斷地進行修正,因此建立各個模塊之間、模塊與系統(tǒng)框架之間的松耦合交互和通信機制,解決系統(tǒng)結(jié)構(gòu)如何適應(yīng)不斷變化的系統(tǒng)需求的問題,是系統(tǒng)結(jié)構(gòu)設(shè)計的重點研究內(nèi)容。
綜合考慮軟件系統(tǒng)的上述特征和模塊間松耦合設(shè)計的思路,筆者在系統(tǒng)設(shè)計開發(fā)過程中使用上述接口標(biāo)準(zhǔn)作為模塊之間的交互方法,同時結(jié)合所要構(gòu)建的軟件系統(tǒng)建立該標(biāo)準(zhǔn)的系統(tǒng)應(yīng)用框架,從而實現(xiàn)對系統(tǒng)整體框架的約束,實現(xiàn)系統(tǒng)各個模塊之間的松耦合特性。
通過引入上述接口標(biāo)準(zhǔn)和框架,其優(yōu)點在于以下兩個方面。
(1)建立接口規(guī)范,形成穩(wěn)定的系統(tǒng)框架。相比于一般的接口開發(fā),該設(shè)計進行了更加深入的接口開發(fā),形成了一套統(tǒng)一的接口標(biāo)準(zhǔn),規(guī)定了每一個系統(tǒng)模塊內(nèi)部、模塊與模塊、模塊與系統(tǒng)之間的開發(fā)規(guī)范。將最終的代碼實現(xiàn)隱藏在接口標(biāo)準(zhǔn)之后,從而在一定程度上建立了穩(wěn)定的系統(tǒng)框架。一般的接口設(shè)計,往往在較大的需求變更之后,接口也隨之變化,從而影響到系統(tǒng)的穩(wěn)定。
(2)為系統(tǒng)外進行系統(tǒng)邏輯編輯提供了基礎(chǔ)。接口標(biāo)準(zhǔn)中提供的XML文件格式,結(jié)合系統(tǒng)框架接口,為外部進行系統(tǒng)內(nèi)部邏輯調(diào)用提供了前提,基于該前提條件進行外部邏輯編輯器的開發(fā),從而實現(xiàn)了無須變更平臺代碼即可修改系統(tǒng)運行邏輯的關(guān)鍵技術(shù)。
圖4 軟件系統(tǒng)中的應(yīng)用示例
圖4是該系統(tǒng)解耦合設(shè)計方法在軟件系統(tǒng)中的應(yīng)用示例。由于多數(shù)軟件系統(tǒng)中系統(tǒng)邏輯的擴展性要求較高,因此系統(tǒng)設(shè)定了系統(tǒng)邏輯編輯。系統(tǒng)邏輯編輯完成之后需要在軟件系統(tǒng)中驅(qū)動運行,上述接口規(guī)范提供了該項功能實現(xiàn)的基礎(chǔ)。同時基礎(chǔ)功能的變更,也將封裝在上述的接口規(guī)范之后,保證了軟件系統(tǒng)框架的穩(wěn)定性。
將本文描述的方法應(yīng)用于軟件系統(tǒng)的設(shè)計,在系統(tǒng)開發(fā)過程中雖然在一定程度上增加了模塊的開發(fā)工作量,但是對于整個系統(tǒng)的結(jié)構(gòu)而言可以忽略不計。該方法描述的接口標(biāo)準(zhǔn),基于接口標(biāo)準(zhǔn)建立的系統(tǒng)結(jié)構(gòu)較好地滿足了系統(tǒng)設(shè)計要求。將本方法應(yīng)用于對擴展性要求較高,系統(tǒng)內(nèi)部各個模塊之間的邏輯變化需要適時進行調(diào)整的系統(tǒng)中時,該方法具有較好的推廣應(yīng)用價值。
Research on Decoupling Design Method of Software System Based on Extensible Markup Language
Lei Yang
Nanjing Institute of Simulation Technology, Jiangsu Nanjing 210016
The decoupling design of software system is one of the basic design of software system with high scalability and high maintenance. Therefore, how to establish the decoupling structure of software system is one of the key technologies of software system design, especially large software system. A design approach to system decoupling is provided through the use of Extensible Markup Language (Extensible Markup Language, XML). Based on the design of modular system, this method designs an interface standard for software system module development, and establishes a set of software system decoupling system structure. Applying this method to system development process makes system friendly and easy to use in the expansion process of application logic.
system decoupling; software system; system design; extensible markup language
TP301.6
A