本文通過(guò)介紹幾種軟件開(kāi)發(fā)中常見(jiàn)軟件體系結(jié)構(gòu)模型,以及對(duì)幾種模型進(jìn)行分析比較,從而為軟件開(kāi)發(fā)過(guò)程中軟件體系結(jié)構(gòu)的選擇提供一些思路,并減少一些開(kāi)發(fā)軟件過(guò)程中的風(fēng)險(xiǎn)。 

  【關(guān)鍵詞】軟件體系結(jié)構(gòu) 結(jié)構(gòu)模型 管道過(guò)濾器 MVC模型 

  計(jì)算機(jī)應(yīng)用越來(lái)越廣泛和深入,計(jì)算機(jī)軟件規(guī)模和種類也變得更為復(fù)雜和多樣化。在軟件開(kāi)發(fā)過(guò)程中,設(shè)計(jì)開(kāi)發(fā)人員所要考慮的,不僅僅是系統(tǒng)的功能需求,還要更多的考慮軟件后期維護(hù)和升級(jí)等問(wèn)題,因此軟件體系結(jié)構(gòu)的設(shè)計(jì)選擇對(duì)于一個(gè)軟件開(kāi)發(fā)過(guò)程十分重要。自軟件體系機(jī)構(gòu)出現(xiàn)以來(lái),其結(jié)構(gòu)、模式也在不斷變化與發(fā)展,目前,有幾種比較常見(jiàn)的軟件體系結(jié)構(gòu)模型,本文就對(duì)這幾種常見(jiàn)的結(jié)構(gòu)模型進(jìn)行介紹以及對(duì)它們進(jìn)行簡(jiǎn)單的比較分析。 

  1 層次體系結(jié)構(gòu)模型 

  層次體系結(jié)構(gòu)模型是一種非常常見(jiàn)的體系結(jié)構(gòu)模型,它的基本思想是將系統(tǒng)在水平方向上劃分為多個(gè)抽象層次,中間層(第一層和最后一層除外)既服務(wù)于上層,又被下層服務(wù)。此外,層次之間的通信既可以相鄰層次間進(jìn)行,也可以通過(guò)協(xié)議隔層進(jìn)行。使用最為廣泛的分層體系結(jié)構(gòu)是分層通信協(xié)議,我們常用的TCP/IP網(wǎng)絡(luò)就是這種模型。這種結(jié)構(gòu)下,與上層的通信都依靠于每一層的一個(gè)抽象功能,低層通信定義在低層次上,一般來(lái)講,最底層與物理層次相連,其他常見(jiàn)的和最底層連接的有底層數(shù)據(jù)庫(kù)連接或者操作系統(tǒng)連接。 

  分層體系結(jié)構(gòu)非常常見(jiàn),優(yōu)點(diǎn)也非常明顯,有以下幾點(diǎn): 

 。1)抽象程度遞增。分層體系結(jié)構(gòu)中每層的抽象程度不一樣,遞增的設(shè)計(jì)能夠使得系統(tǒng)的復(fù)雜程度更為容易被軟件開(kāi)發(fā)設(shè)計(jì)人員理解和掌握,從而按照復(fù)雜程度分解其功能。 

  (2)支持系統(tǒng)功能增強(qiáng)。由于通信交互通常發(fā)生在每層和上下層之間,對(duì)于軟件的全局相對(duì)來(lái)說(shuō)更容易把握,因此在面對(duì)需求變化或者軟件需要升級(jí)時(shí),就可以通過(guò)在某一層修改功能或者增加功能來(lái)實(shí)現(xiàn)。 

  (3)支持功能復(fù)用。一般來(lái)說(shuō),對(duì)于服務(wù)接口的定義不會(huì)變,因此,不同接口實(shí)現(xiàn)之間交換使用就可以在同一層進(jìn)行。通常,會(huì)定義一個(gè)標(biāo)準(zhǔn)接口的不同實(shí)現(xiàn)方法。 

  層次結(jié)構(gòu)模型也有以下幾個(gè)缺點(diǎn): 

  (1)更改層麻煩。修改底層對(duì)高層產(chǎn)生影響時(shí),則此底層的上層都需要進(jìn)行修改。 

 。2)效率低。層次之間的通信需要進(jìn)行各種參數(shù)的傳遞與轉(zhuǎn)換;高層對(duì)于底層的一些執(zhí)行并不需要等。 

 。3)層次的粒度難以確定。 

  2 管道與過(guò)濾器結(jié)構(gòu)模型 

  過(guò)濾器為功能模塊,功能模塊之間的連接(數(shù)據(jù)流的輸入輸出)為通道,兩者共同組成了管道與過(guò)濾器結(jié)構(gòu)模型。功能模塊間相互獨(dú)立,即過(guò)濾器不需要進(jìn)行狀態(tài)之間的交互為管道過(guò)濾器模型的一個(gè)重要的特性,其中,若輸入輸出發(fā)生在任兩個(gè)過(guò)濾器之間則兩個(gè)過(guò)濾器可以連接使用。管道過(guò)濾器結(jié)構(gòu)同時(shí)也限制了輸入輸出格式,因此在交互式應(yīng)用中,這種模式是不適用的。其中,常見(jiàn)的管道過(guò)濾器模型應(yīng)用之一就是編譯器系統(tǒng)。 

  管道過(guò)濾器模型有以下幾個(gè)優(yōu)點(diǎn): 

 。1)中間件可以不再使用,同時(shí)也支持使用中間件。 

 。2)靈活性增加。過(guò)濾器之間可以進(jìn)行靈活的連接使用,組件的重用性提高。 

 。3)效率提高?梢赃M(jìn)行并行處理。 

  管道與過(guò)濾器結(jié)構(gòu)模型也有以下幾個(gè)缺點(diǎn): 

 。1)信息共享問(wèn)題。組件之間狀態(tài)共享信息代價(jià)較大。 

 。2)效率高假象。并行處理并沒(méi)有真正提高效率。 

 。3)數(shù)據(jù)轉(zhuǎn)換增加開(kāi)銷。 

  3 面向?qū)ο蠼Y(jié)構(gòu)模型 

  對(duì)于處理面向現(xiàn)實(shí)世界問(wèn)題的系統(tǒng),面向?qū)ο蠼Y(jié)構(gòu)模型是最為合理的選擇。在使用面向?qū)ο蟮能浖,把一切如?shù)據(jù)、組件模塊都作為對(duì)象來(lái)處理。對(duì)象包括對(duì)象的狀態(tài)即數(shù)據(jù)以及對(duì)象的行為即操作方法,對(duì)象之間通信通過(guò)信息傳遞實(shí)現(xiàn)。在面向?qū)ο竽P椭,?duì)用戶透明,即用戶不需要知道對(duì)象內(nèi)部狀態(tài),只需要知道功能及其使用,因而將軟件系統(tǒng)開(kāi)發(fā)周期和難度盡量減少。 

  面向?qū)ο蠼Y(jié)構(gòu)模型有以下優(yōu)點(diǎn): 

 。1)對(duì)象封裝。用戶不必完全了解對(duì)象的數(shù)據(jù)狀態(tài),開(kāi)發(fā)中可以減少難度和減少時(shí)間周期。 

 。2)對(duì)象繼承。繼承提高了為代碼的復(fù)用性,減少開(kāi)發(fā)人員工作量和后期維護(hù)等工作量。 

 。3)錯(cuò)誤修改方便。對(duì)象出現(xiàn)錯(cuò)誤,修改此對(duì)象即可,不需要對(duì)其他對(duì)象進(jìn)行修改。 

  面向?qū)ο蠼Y(jié)構(gòu)模型有以下缺點(diǎn): 

  (1)交互要求高。對(duì)象間進(jìn)行交互通過(guò)過(guò)程調(diào)用進(jìn)行,調(diào)用對(duì)象則是通過(guò)對(duì)象標(biāo)識(shí)來(lái)作為通信媒介。 

 。2)修改繁瑣。對(duì)象通過(guò)標(biāo)識(shí)符標(biāo)識(shí),若對(duì)象的標(biāo)識(shí)符修改了,則必須修改對(duì)對(duì)象的所有實(shí)例,同時(shí)需要解決標(biāo)識(shí)符修改帶來(lái)的副作用。 

  4 MVC體系結(jié)構(gòu)模型 

  MVC體系結(jié)構(gòu)(Model―Visual―Controller即模型―視圖――控制器體系結(jié)構(gòu))也是當(dāng)今應(yīng)用十分廣泛的交互界面結(jié)構(gòu)模型。模型、視圖和控制器是MVC結(jié)構(gòu)模型的三個(gè)組成部分,它強(qiáng)制性地將軟件的輸入輸出以及處理三個(gè)部分分開(kāi)進(jìn)行,每個(gè)部分相互獨(dú)立,從而使得圖形化用戶交互更為方便。比如,可以使用MVC結(jié)構(gòu)模型構(gòu)建拍賣系統(tǒng),使得處理結(jié)果更為直觀。 

  MVC體系結(jié)構(gòu)模型的優(yōu)點(diǎn)如下: 

  (1)模式復(fù)用性。對(duì)于同一個(gè)模型,可以有多個(gè)視圖進(jìn)行任務(wù)處理。同一個(gè)模式可以開(kāi)發(fā)多個(gè)應(yīng)用程序框架。 

 。2)視圖靈活?梢詫⒁晥D同步化,同時(shí)可以將視圖和控制器插入。 

  (3)控制器和視圖聯(lián)系緊密。 

  MVC體系結(jié)構(gòu)模型的缺點(diǎn)如下: 

  (1)系統(tǒng)開(kāi)發(fā)復(fù)雜性增加。同時(shí)增加了后期維護(hù)以及升級(jí)更多的更新因素。 

 。2)高耦合。模型、視圖和控制器之間耦合過(guò)于緊密,修改維護(hù)工作量大。 

 。3)效率低。視圖中的數(shù)據(jù)訪問(wèn)效率較低。 

  5 結(jié)束語(yǔ) 

  軟件開(kāi)發(fā)與以往相比,軟件算法和數(shù)據(jù)結(jié)構(gòu)已經(jīng)不再是最為重要的部分,軟件開(kāi)發(fā)中軟件體系結(jié)構(gòu)模型的選擇才是目前適應(yīng)軟件開(kāi)發(fā)最重要的關(guān)注點(diǎn)。軟件體系結(jié)構(gòu)模型的選擇已經(jīng)成為整個(gè)軟件系統(tǒng)是否能成功開(kāi)發(fā)的基礎(chǔ),通過(guò)軟件體系結(jié)構(gòu)模型,可以對(duì)系統(tǒng)開(kāi)發(fā)中項(xiàng)目可行性、開(kāi)發(fā)周期、功能需求分析、項(xiàng)目復(fù)雜程度和風(fēng)險(xiǎn)預(yù)測(cè)等進(jìn)行估計(jì)預(yù)測(cè)。從上文對(duì)層次體系結(jié)構(gòu)模型、管道與過(guò)濾器結(jié)構(gòu)模型、面向?qū)ο蠼Y(jié)構(gòu)模型和MVC體系結(jié)構(gòu)模型四種軟件體系結(jié)構(gòu)模型進(jìn)行簡(jiǎn)單的總結(jié)介紹以及對(duì)其優(yōu)缺點(diǎn)分析,可以發(fā)現(xiàn)每種體系結(jié)構(gòu)都不可避免的在不同方面有強(qiáng)點(diǎn)或者弱點(diǎn),在實(shí)際軟件開(kāi)發(fā)中,需要根據(jù)項(xiàng)目實(shí)際情況綜合分析,從而選用恰當(dāng)合理的軟件體系結(jié)構(gòu)模型,使得軟件開(kāi)效率和質(zhì)量都有所提高。 

    參考文獻(xiàn)

  [1]楊志明.幾種常見(jiàn)軟件體系結(jié)構(gòu)模型的分析[J].計(jì)算機(jī)工程與設(shè)計(jì),2004(08):1326-1328. 

  [2]田潤(rùn)芙,楊旭.常見(jiàn)軟件體系結(jié)構(gòu)分析[J].網(wǎng)絡(luò)財(cái)富,2010(01):160-161. 

  [3]侯彬,張立臣.基于中間層的軟件體系結(jié)構(gòu)模型[J].電子設(shè)計(jì)工程,2010(11):1-3.