廖慶鋒
(廣東省五華縣水務(wù)局,廣東 五華 514400)
英國首相丘吉爾說,我們構(gòu)造建筑物,然后建筑物構(gòu)造我們 (We shape our buildings,and afterwards our buildings shape us)。英國下議院的會議廳較狹窄,無法使所有的下議院議員面向同一個方向入座,而必須分成兩側(cè)入座。丘吉爾認(rèn)為,議員們?nèi)胱臅r候自然會選擇與自己政見相同的人同時入座,而這就是英國政黨制的起源。Party這個詞的原意就是"方","面"。政黨起源的關(guān)鍵就是建筑物對人的影響。而軟件世界中的建筑——軟件架構(gòu)也正在對人類在軟件世界中的活動起到越來越重大的影響和作用。
隨著當(dāng)今軟件世界技術(shù)的發(fā)展,軟件的規(guī)模越來越大、軟件的開發(fā)周期越來越短、軟件行業(yè)分工越來越細(xì)、市場競爭越來越激烈,需要軟件開發(fā)商能夠快速實(shí)現(xiàn)和部署產(chǎn)品?;赪eb的服務(wù)和應(yīng)用迅速地壯大,使企業(yè)級應(yīng)用開發(fā)領(lǐng)域有了巨大的進(jìn)步和發(fā)展。這些大型企業(yè)級應(yīng)用的結(jié)構(gòu)復(fù)雜,涉及的外部資源眾多、事務(wù)密集、數(shù)據(jù)量大、用戶數(shù)多、有較強(qiáng)的安全性考慮。目前大多數(shù)企業(yè)采用基于J2EE技術(shù)的解決方案。很多人在構(gòu)建這些復(fù)雜的企業(yè)級應(yīng)用時沒有進(jìn)行良好的設(shè)計,或者說對一些重要的問題沒有進(jìn)行認(rèn)真的考慮,這常常導(dǎo)致了開發(fā)困難、應(yīng)用不靈活、維護(hù)性擴(kuò)展性復(fù)用性差等問題。這樣就導(dǎo)致軟件的淘汰過快,而同樣的產(chǎn)品或者項(xiàng)目之間,無法重復(fù)利用已有的開發(fā)成果,使得整個行業(yè)的重復(fù)開發(fā),進(jìn)而造成資源、時間的浪費(fèi)。
計算機(jī)軟件的歷史開始于五十年代,歷史非常短暫,而相比之下建筑工程則從石器時代就開始了,人類在幾千年的建筑設(shè)計實(shí)踐中積累了大量的經(jīng)驗(yàn)和教訓(xùn)。建筑設(shè)計基本上包含兩點(diǎn),一是建筑風(fēng)格,二是建筑模式。獨(dú)特的建筑風(fēng)格和恰當(dāng)選擇的建筑模式,便可以產(chǎn)生一個獨(dú)一無二的建筑。仍然舉一個建筑學(xué)上的例子,在南方多濕地的地方,如何避免房間潮濕便成為一個重要的問題。也正如大家所知道的,高腳屋便成為解決這個問題的一個建筑模式,因?yàn)樗芎芎玫慕鉀Q那個地方潮濕問題。這個顯然是建筑學(xué)上的一個經(jīng)驗(yàn),人們在那個地方不需要在多考慮太多問題,只需要沿用這個建筑模式,便可以獲得一個相當(dāng)舒適的生活環(huán)境。與此類似的,在運(yùn)用軟件架構(gòu)來解決軟件系統(tǒng)的復(fù)用性問題時,是很少“白手起家”,從零開始的。正如采用架構(gòu)來解決軟件設(shè)計問題所要達(dá)到的目的一樣,軟件架構(gòu)實(shí)施的重要手段之一便是“重用”。我們要積極地尋找已經(jīng)匯集成冊的經(jīng)驗(yàn),包括架構(gòu)模式,設(shè)計模式等已經(jīng)成形的部分。換句話說,要努力獲取那些可再度利用的資源。而放棄考慮過去的經(jīng)驗(yàn)的做法是不可取的。當(dāng)問題重復(fù)發(fā)生時,可重復(fù)使用的資源就是解決方案;可重復(fù)使用的資源就是一種在重復(fù)使用時已經(jīng)在腦海中得到提煉的資源。軟件架構(gòu)中的元素可以在當(dāng)前系統(tǒng)的前后關(guān)系里再度使用,與此同時,也可能已經(jīng)將其架構(gòu)或者其中的一些元素作為可再度使用的資源,用于當(dāng)前系統(tǒng)之外。因此,對于已經(jīng)存在,并已經(jīng)證明行之有效的架構(gòu)模式,設(shè)計模式進(jìn)行應(yīng)用和研究是對于將來的工作無疑也有重大的意義。
20世紀(jì)60年代的軟件危機(jī)導(dǎo)致了有關(guān)軟件復(fù)用的研究。在1968年NATO軟件工程會議上,會議的邀請論文“Mass Produced Software Components”首次提出可復(fù)用庫的思想,并希望通過代碼復(fù)用實(shí)現(xiàn)大規(guī)模軟件生產(chǎn)。近十幾年來,面向?qū)ο蠹夹g(shù)出現(xiàn)并逐步成為主流技術(shù),為軟件復(fù)用提供了基本的技術(shù)支持。軟件復(fù)用己經(jīng)成為現(xiàn)代軟件工程的一個主要研究重點(diǎn),被視為解決軟件危機(jī),提高軟件生產(chǎn)效率和質(zhì)量的現(xiàn)實(shí)可行的途徑。隨著軟件復(fù)用技術(shù)的發(fā)展,復(fù)用的對象已經(jīng)由最早的代碼、函數(shù)庫,發(fā)展到類庫、構(gòu)件庫,甚至于需求分析結(jié)果、體系結(jié)構(gòu)、設(shè)計方案、測試計劃等一切可復(fù)用的軟件資產(chǎn)。軟件復(fù)用技術(shù)有助于提高軟件開發(fā)的生產(chǎn)率,提高軟件系統(tǒng)的可靠性,減少軟件維護(hù)的負(fù)擔(dān)。在面向?qū)ο箢I(lǐng)域,模式(patterns)、框架(frameworks)、組件(components)、類庫(class libraries)、等等都是一些比較常見的軟件復(fù)用技術(shù)。類庫是最為常用的一種復(fù)用技術(shù),與函數(shù)庫相比,類庫通常能更為有效地支持小規(guī)模的復(fù)用,因?yàn)轭悘?qiáng)調(diào)了“數(shù)據(jù)”和“在數(shù)據(jù)上進(jìn)行操作的方法”的內(nèi)聚。類庫常常獨(dú)立于特定領(lǐng)域,并可被廣泛地應(yīng)用,但其復(fù)用的有效范圍仍然是有限的,因?yàn)樗痪哂邢嚓P(guān)軟件制品族中典型的控制流、協(xié)作,以及可變性。類庫中的類通常是被動的,開發(fā)者必須持續(xù)地重寫大量的控制邏輯,才能把各個可復(fù)用的類綁定在一起,從而形成完整的應(yīng)用。模式指導(dǎo)構(gòu)建新應(yīng)用的開發(fā)者進(jìn)行設(shè)計選擇,不僅提供了代碼復(fù)用,而且實(shí)現(xiàn)了設(shè)計復(fù)用。模式的概念起源于建筑學(xué)家Christopher Alexander的著作 《A PatternLanguage》。1995年,在Erich Gamma等“四人組”的《設(shè)計模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)》出版后,產(chǎn)生了重大的影響,軟件模式被廣泛接受。目前,模式主要應(yīng)用于軟件體系結(jié)構(gòu)和設(shè)計以及軟件開發(fā)過程和組織。每年國際上都舉辦包括PLoP(Pattern Language of Programming),ECOOP等在內(nèi)的學(xué)術(shù)會議對設(shè)計模式進(jìn)行討論。當(dāng)前,國內(nèi)外針對設(shè)計模式的研究工作主要包括以下三個方面:新設(shè)計模式的發(fā)現(xiàn)和發(fā)明;設(shè)計模式的分類和描述;設(shè)計模式的應(yīng)用。這三者構(gòu)成一個特殊到一般,再由一般到特殊的循環(huán)往復(fù)的過程。早期的研究大多集中于尋找和發(fā)現(xiàn)設(shè)計模式,如今研究的重點(diǎn)已轉(zhuǎn)向后兩者,因?yàn)槿绾纬浞职l(fā)揮設(shè)計模式在軟件開發(fā)中的作用從而使設(shè)計過程越來越確定,越來越成熟,應(yīng)該是研究其它問題的首要前提。面向?qū)ο罂蚣苁乾F(xiàn)代軟件工程中的一個主要研究內(nèi)容,它是整個或部分系統(tǒng)的可重用設(shè)計,由于提供了大粒度的軟件復(fù)用,認(rèn)為是面向?qū)ο笙到y(tǒng)獲得最大軟件復(fù)用的方式。
面向?qū)ο髴?yīng)用框架技術(shù)越來越多地被廣大軟件研制開發(fā)人員所接受并且在某些應(yīng)用領(lǐng)域中成功地開發(fā)出了應(yīng)用框架。進(jìn)行領(lǐng)域工程,研究發(fā)掘應(yīng)用領(lǐng)域可復(fù)用的設(shè)計模式,并且基于發(fā)掘出的設(shè)計模式開發(fā)應(yīng)用框架是一條完整的解決軟件復(fù)用問題的有效途徑。Schmidt研究小組將框架開發(fā)原理和模式應(yīng)用于網(wǎng)絡(luò)化應(yīng)用領(lǐng)域,成功地開發(fā)了一個面向并發(fā)通訊系統(tǒng)軟件開發(fā)的應(yīng)用框架ACE(AdaptiveCommunicationEnvironment)。在ACE中實(shí)現(xiàn)了許多用于并發(fā)通信軟件的核心模式,為面向?qū)ο蟮木W(wǎng)絡(luò)應(yīng)用程序?qū)崿F(xiàn)了一種模式語言。組件是被用于多層企業(yè)應(yīng)用的一種復(fù)用技術(shù)。組件是實(shí)現(xiàn)特定的一個或一組服務(wù)的軟件系統(tǒng)的一個被封裝的部分。組件具有一個或多個接口,提供對其服務(wù)的訪問。組件充當(dāng)了應(yīng)用結(jié)構(gòu)的“積木”,而且,只需了解其接口協(xié)議,就可對其進(jìn)行復(fù)用?,F(xiàn)在有三種主流的組件模型:EJB(Enterprise JavaBeans)、COM(Component Object Model,組件對象模型)/DCOM(Distributed Component Object Model,分布式組件對象模型)和CORBA(Common Object Request Broker Architecture)。Sun Microsystems公司發(fā)布并倡導(dǎo)了 J2EE規(guī)范后,由于 J2EE平臺提供了一個基于組件的方法,來設(shè)計、開發(fā)、裝配及部署企業(yè)應(yīng)用程序,提供了多層的分布式的應(yīng)用模型、組件重用、一致化的安全模型以及靈活的事務(wù)控制,所以 J2EE技術(shù)已經(jīng)并成功的使用在許多的大型企業(yè)級應(yīng)用中。即便是有了像 J2EE這樣的企業(yè)級軟件平臺的今天,僅僅使用 J2EE所提供的高級抽象 API來開發(fā)企業(yè)級應(yīng)用是遠(yuǎn)遠(yuǎn)不夠的,一個構(gòu)建在這些高級API上的良好的企業(yè)級應(yīng)用框架是開發(fā)成功的企業(yè)級應(yīng)用所不可或缺的。
目前沒有通用的企業(yè)級應(yīng)用框架,但有不少針對企業(yè)級應(yīng)用 Web層的框架,即 Web應(yīng)用框架,如 Struts、iPlanet、Webwork等等。Struts是一個免費(fèi)的開源的 Web層的應(yīng)用框架,(Model-View-Controller,模型-視圖-控制器)的標(biāo)準(zhǔn)實(shí)現(xiàn),主要關(guān)注于 Controller流程,基于 JSP(Java Server Pages)與 Taglib(tag library,標(biāo)記庫)實(shí)現(xiàn) View。iPlanet是一個成熟的、強(qiáng)大的,基于 J2EE標(biāo)準(zhǔn)的面向于開發(fā) Web應(yīng)用程序的應(yīng)用框架。結(jié)合了顯示字段、應(yīng)用程序事件、組件層次和以頁面為中心的開發(fā)方法、以及 MVC和Service to Worker(工作者服務(wù))的設(shè)計模式等概念。Webwork是 jive論壇采用的框架,采用 Command模式進(jìn)行 action的轉(zhuǎn)發(fā),并可結(jié)合多種view模型。這些框架都側(cè)重于用戶界面層和控制層,并不是企業(yè)層(業(yè)務(wù)邏輯層)的應(yīng)用框架。
[1]Mili,H.,Mili,F.,Mili,A.Reusing Software:Issues and Re search Directions.IEEETransactions on Software Engineering,1995,21,(6):528-562.
[2]楊芙清,梅宏,李克勤.軟件復(fù)用與軟件構(gòu)件技術(shù)[J].電子學(xué)報,1992,27,(2):68-75.
[3]楊芙清,朱冰,梅宏.軟件復(fù)用[M].軟件學(xué)報,1995,6,(9):525-533.