(出自http://www.huihoo.com/patterns/framework/1.html) (清華大學(xué) 謝曉芹 王克宏) 在信息時(shí)代,新的技術(shù)革命正在改變我們?nèi)粘I畹拿婷玻@場(chǎng)技術(shù)革命的核心是計(jì)算機(jī)軟件系統(tǒng)。在面向?qū)ο蠹夹g(shù)給解決軟件危機(jī)帶來曙光之時(shí), 分布式網(wǎng)絡(luò)計(jì)算的巨大壓力又給軟件開發(fā)提出了許多新的難題,使軟件開發(fā)仍處于高風(fēng)險(xiǎn)狀態(tài)。新的分布式網(wǎng)絡(luò)計(jì)算要求軟件實(shí)現(xiàn)跨空間、跨時(shí)間、跨設(shè)備、跨用戶的共享,導(dǎo)致軟件在規(guī)模、復(fù)雜度、功能上的極大增長(zhǎng),迫使軟件要向異構(gòu)協(xié)同工作、各層次上集成、可反復(fù)重用的工業(yè)化道路上前進(jìn)。為適應(yīng)軟件的這種需求,新的軟件開發(fā)模式必須支持分布式計(jì)算、瀏覽器/服務(wù)器結(jié)構(gòu)、模塊化和構(gòu)件化集成,使軟件類似于硬件一樣,可用不同的標(biāo)準(zhǔn)構(gòu)件拼裝而成。具體地說可實(shí)現(xiàn)下列幾點(diǎn)要求:
為滿足上述要求,軟件構(gòu)件技術(shù)出現(xiàn)了。而構(gòu)件重用的目標(biāo)是達(dá)到需求、分析、設(shè)計(jì)、編碼、測(cè)試的重用。從此,一種影響軟件產(chǎn)業(yè)發(fā)展的新的軟件開發(fā)方法誕生了。 從抽象程度來看,面向?qū)ο蠹夹g(shù)已達(dá)到了類級(jí)重用(代碼重用),它以類為封裝的單位。這樣的重用粒度還太小,不足以解決異構(gòu)互操作和效率更高的重用。構(gòu)件將抽象的程度提到一個(gè)更高的層次,它是對(duì)一組類的組合進(jìn)行封裝,并代表完成一個(gè)或多個(gè)功能的特定服務(wù),也為用戶提供了多個(gè)接口。整個(gè)構(gòu)件隱藏了具體的實(shí)現(xiàn),只用接口提供服務(wù)。這樣,在不同層次上, 構(gòu)件均可以將底層的多個(gè)邏輯組合成高層次上的粒度更大的新構(gòu)件,甚至直接封裝到一個(gè)系統(tǒng),使模塊的重用從代碼級(jí)、對(duì)象級(jí)、架構(gòu)級(jí)到系統(tǒng)級(jí)都可能實(shí)現(xiàn),從而使軟件像硬件一樣,能任人裝配定制而成的夢(mèng)想得以實(shí)現(xiàn)。近幾年來,構(gòu)件技術(shù)的發(fā)展已證明了它的巨大威力,在這其中,CORBA標(biāo)準(zhǔn)和Java技術(shù)的突破,功不可沒! 至今, 構(gòu)件技術(shù)已形成三個(gè)流派:Sun的Java平臺(tái)、Microsoft的COM+、IBM的CORBA。 構(gòu)件發(fā)展自律當(dāng)先 基于構(gòu)件的軟件開發(fā)技術(shù)近年來取得了突飛猛進(jìn)的發(fā)展,這不僅對(duì)軟件產(chǎn)業(yè)的技術(shù)革新影響深遠(yuǎn),還將為許多其他領(lǐng)域帶來巨大的效益。早在1998年4月,在日本京都召開的基于構(gòu)件的軟件開發(fā)(CBSD)國(guó)際專題學(xué)術(shù)會(huì)議上達(dá)成了兩個(gè)共識(shí): 1. 對(duì)于CBSD而言,對(duì)象技術(shù)并不是必需的,同時(shí)僅僅依靠對(duì)象技術(shù)也不能實(shí)現(xiàn)CBSD。 這似乎有些難以理解。對(duì)象技術(shù)僅僅是CBSD的開始,但是就對(duì)象技術(shù)本身而言,它并不能全面地表述CBSD所需的抽象概念,而且脫離對(duì)象技術(shù),CBSD也完全可以實(shí)現(xiàn)。因此,對(duì)于CBSD而言,對(duì)象技術(shù)既不是必需的,僅有對(duì)象技術(shù)也是不夠的。CBSD將導(dǎo)致使用對(duì)象技術(shù)的系統(tǒng)設(shè)計(jì)方法、項(xiàng)目管理方法和組織形式的實(shí)質(zhì)性變革。 具體地說,將構(gòu)件看做是一個(gè)可替換的單元時(shí),單純的對(duì)象技術(shù)就不夠了。構(gòu)件的各種定義中都或多或少地強(qiáng)調(diào)了構(gòu)件的一個(gè)特性:對(duì)上下文的依賴性。這一特性能夠通過在規(guī)范中定義一種“use”語句而實(shí)現(xiàn),也就是對(duì)所需系統(tǒng)資源的一種聲明。盡管對(duì)這種方式很多人持有異議,他們認(rèn)為使用這種“use”語句,意味著接口描述就是一種實(shí)現(xiàn)機(jī)制,而不是一種對(duì)實(shí)現(xiàn)方法的抽象,但是,對(duì)象技術(shù)卻根本不支持構(gòu)件的這種特性,這樣不利于進(jìn)行設(shè)計(jì)層的抽象,特別是在試圖使用已有的構(gòu)件進(jìn)行集成時(shí),經(jīng)常會(huì)遇到麻煩。 現(xiàn)在人們比較一致的觀點(diǎn)是將分布式對(duì)象技術(shù)當(dāng)做是一種基礎(chǔ)設(shè)施,而把構(gòu)件看做是能夠應(yīng)用于不同的基礎(chǔ)設(shè)施的抽象和實(shí)現(xiàn)。 在實(shí)踐中人們也體會(huì)到這一點(diǎn),如長(zhǎng)事務(wù)的處理不能靠對(duì)象技術(shù)來解決。由于事務(wù)的原子性、一致性、隔離性和持久性的特點(diǎn),不能把長(zhǎng)事務(wù)簡(jiǎn)單地看成一個(gè)對(duì)象,它是一連串處理步驟的序列。這也是企業(yè)應(yīng)用軟件中常遇到的問題,目前一些服務(wù)器上的軟件提供的事務(wù)服務(wù),就是為了解決這個(gè)復(fù)雜的疑難問題。 2.構(gòu)件離不開體系結(jié)構(gòu) 由于發(fā)展CBSD的一個(gè)初衷是通過一種集成的開發(fā)方式來增強(qiáng)系統(tǒng)的靈活性,因此自然要考慮這種集成方式的可行性。然而,通過抽象接口來描述,已經(jīng)超出了對(duì)象技術(shù)的能力。但是,對(duì)“插件”式構(gòu)件的重用程度,與構(gòu)件對(duì)一套預(yù)先定義的限制和約定的依賴程度有直接的關(guān)系。 大多數(shù)構(gòu)件技術(shù)如EJB、ActiveX、CORBA等對(duì)于構(gòu)件都有一定的限制。例如,盡管構(gòu)件基礎(chǔ)設(shè)施對(duì)構(gòu)件的接口有一定的訪問能力,但這種能力要求構(gòu)件必須能夠?qū)崿F(xiàn)一定的服務(wù)或遵循構(gòu)件基礎(chǔ)設(shè)施所定義的一些規(guī)范。 許多專家認(rèn)為,構(gòu)件應(yīng)當(dāng)實(shí)現(xiàn)兩種接口:一種是功能性接口,能夠反映構(gòu)件在系統(tǒng)中的角色;另一種是非功能性接口,能夠反映由底層的構(gòu)件框架所定義的構(gòu)件模型。非功能性接口描述了一種體系結(jié)構(gòu)上的限制,這種限制允許CBS(components-based system)具有集成能力和其他的一些特性。所以,對(duì)構(gòu)件概念的理解,必然與體系結(jié)構(gòu)強(qiáng)加于構(gòu)件的這些限制密切相關(guān)。 許多專家認(rèn)為,盡管構(gòu)件與其所屬的體系結(jié)構(gòu)密切相關(guān),但是上述的兩種接口仍然過于強(qiáng)調(diào)構(gòu)件框架在軟件體系結(jié)構(gòu)中的地位。而實(shí)際上,很多人都曾極力地尋求軟件體系結(jié)構(gòu)和構(gòu)件框架的區(qū)別。但是通過對(duì)體系結(jié)構(gòu)的三種不同觀點(diǎn)的定義,保留構(gòu)件框架概念的二義性: 在研討中出現(xiàn)的這些關(guān)于構(gòu)件的更多特性,表明構(gòu)件是一種設(shè)計(jì)階段的復(fù)雜實(shí)體,它包括抽象的概念和具體的實(shí)現(xiàn)。 因此,許多專家認(rèn)為,使用現(xiàn)成構(gòu)件的CBSD,把構(gòu)件視為一種商業(yè)上的現(xiàn)成商品,在這種情況下,CBSD必須建立關(guān)于構(gòu)件框架的行業(yè)規(guī)范。 構(gòu)件影響不可小覷 要實(shí)現(xiàn)構(gòu)件技術(shù)必須具備下列幾個(gè)條件: 總之,CBSD為軟件開發(fā)技術(shù)帶來了新的生機(jī),其影響力正在顯現(xiàn)。 |