王 雪,鹿 旸,張 辛
(中國地質(zhì)大學(xué)(北京) 軟件學(xué)院,北京 100083)
領(lǐng)域是指一組具有相似或相近軟件需求的應(yīng)用系統(tǒng)所覆蓋的功能區(qū)域[1]。在傳統(tǒng)的軟件開發(fā)中,從對軟件系統(tǒng)最初的概念到可操作實(shí)現(xiàn)的過程,有多個(gè)環(huán)節(jié)多種工作是重復(fù)勞動的。軟件工程中軟件復(fù)用的思想就是為了避免重復(fù)勞動的解決方案,其出發(fā)點(diǎn)就是應(yīng)用系統(tǒng)的開發(fā)不再采用一切“從零開始”的模式,而是充分利用過去應(yīng)用系統(tǒng)開發(fā)過程中積累的知識和經(jīng)驗(yàn),從而使軟件工作者著重于新系統(tǒng)中的新問題和新需求。領(lǐng)域工程就是以軟件復(fù)用為目的,解決可復(fù)用信息的識別、組織和利用問題。它是軟件開發(fā)者用于為相應(yīng)領(lǐng)域定義范圍、指定結(jié)構(gòu)和創(chuàng)建可復(fù)用資產(chǎn)的過程和實(shí)踐,涵蓋界定、分類及創(chuàng)建可復(fù)用構(gòu)件的所有活動。
領(lǐng)域工程是基于可重用構(gòu)件的,軟件產(chǎn)品中的通用功能嵌入在各種軟件構(gòu)件之中,因此領(lǐng)域工程中一項(xiàng)很重要的工作就是生產(chǎn)和組織封裝性良好的和易于重用的軟件構(gòu)件?;跇?gòu)件的軟件開發(fā)重在構(gòu)件的集成而不是軟件的編程。近年來,軟件復(fù)用的研究結(jié)果表明基于體系結(jié)構(gòu)、特定領(lǐng)域的重用能在軟件的質(zhì)量和產(chǎn)量上有較大的改進(jìn)。軟件的體系機(jī)構(gòu)或者說架構(gòu)是一組協(xié)同工作的類,它們?yōu)樘囟愋偷能浖?gòu)筑了一個(gè)可重用的設(shè)計(jì)。面向領(lǐng)域的軟件產(chǎn)品族架構(gòu)同過去的單一軟件產(chǎn)品的體系架構(gòu)不同之處就在于領(lǐng)域平臺提供了公共資產(chǎn),包含領(lǐng)域框架、領(lǐng)域建模工具、公共構(gòu)件庫等。
.NET Framework在底層的執(zhí)行引擎源于托管的虛擬機(jī)概念,其通用語言運(yùn)行時(shí)不僅支持內(nèi)存回收機(jī)制和異常處理機(jī)制,并且實(shí)現(xiàn)了跨語言承諾和組件自描述等特性。其次,.NET Framework為面向?qū)ο蟪绦蛟O(shè)計(jì)提供了單根繼承、多接口實(shí)現(xiàn)等直接的支持,提供了繪圖、網(wǎng)絡(luò)、線程、ADO.NET等一系列的API,可以說對現(xiàn)代組件編程從設(shè)計(jì)、編碼、配置到運(yùn)行都給予了很好的支持。作為新一代應(yīng)用程序的開發(fā)平臺,其平臺構(gòu)造對其代碼的生產(chǎn)性與移植性是高效的[2]。
在軟件的體系架構(gòu)中,分層式結(jié)構(gòu)是最為常見也最為重要的一種結(jié)構(gòu)[3]。如圖1所示是.NET中標(biāo)準(zhǔn)的B/S分層式結(jié)構(gòu)。
基于.NET Framework的應(yīng)用程序一般屬于如上的三層式結(jié)構(gòu):數(shù)據(jù)訪問層、業(yè)務(wù)邏輯層和表示層。數(shù)據(jù)訪問層主要負(fù)責(zé)對數(shù)據(jù)庫的操作;業(yè)務(wù)邏輯層是整個(gè)系統(tǒng)的核心,涉及到系統(tǒng)相關(guān)的業(yè)務(wù);表示層主要負(fù)責(zé)使用者與系統(tǒng)的交互,側(cè)重用戶的體驗(yàn)。分層式結(jié)構(gòu)降低了層與層之間的依賴,有利用各層模塊的修改與復(fù)用,使開發(fā)人員可以只關(guān)注其整個(gè)結(jié)構(gòu)中的某一層。概括來說,分層式設(shè)計(jì)可以達(dá)到如下目的:分散關(guān)注、松散耦合、邏輯復(fù)用和標(biāo)準(zhǔn)定義的目的,從而提高了開發(fā)效率。
一般而言,應(yīng)用系統(tǒng)的架構(gòu)包含兩個(gè)因素:首先,它是一個(gè)應(yīng)用系統(tǒng)從整體到部分的最高層次的劃分,包括架構(gòu)元素、連接器和任務(wù)流;其次,它是開發(fā)一個(gè)應(yīng)用系統(tǒng)所做出的最高層次的、以后難以更改的商業(yè)的和技術(shù)的決定,因此,軟件架構(gòu)是系統(tǒng)成敗的重要決定。軟件架構(gòu)是一個(gè)應(yīng)用系統(tǒng)的草圖,描述的對象是直接構(gòu)成應(yīng)用系統(tǒng)的抽象組件,各個(gè)組件之間的連接明確和相對細(xì)致地描述了組件間的通訊。因此,一個(gè)好的應(yīng)用程序架構(gòu)需要滿足安全性、可靠性、可擴(kuò)展性、可維護(hù)性以及可定制化這些要求。
圖1 .NET中標(biāo)準(zhǔn)的B/S分層式結(jié)構(gòu)
過去軟件工程中關(guān)注的軟件開發(fā)大多是針對一個(gè)單獨(dú)的應(yīng)用系統(tǒng),即針對特定的用戶需求和背景給予分析、設(shè)計(jì)和實(shí)現(xiàn)。隨著軟件工程領(lǐng)域的不斷發(fā)展,這種高成本、長周期的開發(fā)模式已經(jīng)不適用現(xiàn)在日益激烈的市場競爭和多變的軟件需求。軟件產(chǎn)品需要進(jìn)化,軟件的生產(chǎn)模式同樣需要進(jìn)化。領(lǐng)域工程便是實(shí)現(xiàn)這種軟件生產(chǎn)模式進(jìn)化的重要手段,使軟件生產(chǎn)由“單一模式”走向“工廠模式”。
領(lǐng)域工程包括:領(lǐng)域分析、領(lǐng)域設(shè)計(jì)與領(lǐng)域?qū)崿F(xiàn)。領(lǐng)域分析定義領(lǐng)域范圍,識別領(lǐng)域中應(yīng)用的共同特征和可變特征,從而建立領(lǐng)域模型。領(lǐng)域分析基于兩個(gè)概念:抽象和求精。抽象是一種處理復(fù)雜性的有效手段,領(lǐng)域分析使用抽象原則降低復(fù)雜性,有效地從領(lǐng)域的一系列應(yīng)用中抽取特征,創(chuàng)建領(lǐng)域分析產(chǎn)品;對領(lǐng)域分析產(chǎn)品進(jìn)行求精就可以開發(fā)領(lǐng)域中的特定應(yīng)用。領(lǐng)域設(shè)計(jì)和領(lǐng)域?qū)崿F(xiàn)分別根據(jù)領(lǐng)域模型給出設(shè)計(jì)與實(shí)現(xiàn)。因此說,領(lǐng)域分析是面向領(lǐng)域的軟件工程中開發(fā)經(jīng)驗(yàn)的系統(tǒng)的和正、逆向的整合。
面向領(lǐng)域的軟件架構(gòu)與單一的軟件架構(gòu)不同之處在于增加了領(lǐng)域平臺,如圖2所示,應(yīng)用系統(tǒng)層主要指基于領(lǐng)域工程的特定的軟件應(yīng)用;領(lǐng)域平臺層主要包括領(lǐng)域框架、領(lǐng)域建模及相應(yīng)的軟件資源庫;基礎(chǔ)設(shè)施層包括各種服務(wù)器、數(shù)據(jù)庫及操作系統(tǒng)。一個(gè)應(yīng)用系統(tǒng)可以根據(jù)用戶的具體需求對領(lǐng)域平臺中的資源進(jìn)行整合,包括選擇、裁剪和添加。
圖2 面向領(lǐng)域的軟件產(chǎn)品架構(gòu)
基于領(lǐng)域的軟件工程過程模型可簡化為如圖3所示形式。其中需求分析、系統(tǒng)設(shè)計(jì)和系統(tǒng)實(shí)現(xiàn)三個(gè)階段均可以有領(lǐng)域工程的參與,這樣軟件工作者能夠快速并高效地建立一個(gè)應(yīng)用系統(tǒng)。具體來說,任何一個(gè)應(yīng)用程序都可以從領(lǐng)域平臺中復(fù)用領(lǐng)域通用功能及其相應(yīng)構(gòu)件,同時(shí)把差異功能及其構(gòu)件提供給領(lǐng)域平臺。
面向領(lǐng)域的. NET應(yīng)用系統(tǒng)架構(gòu)就是指借助于.NET開發(fā)平臺對某一領(lǐng)域問題所建立的通用的軟件架構(gòu),它的功能在于能夠把握許多相似應(yīng)用程序的結(jié)構(gòu),為運(yùn)行一批對象提供了一個(gè)有組織的環(huán)境。基于該思想應(yīng)用系統(tǒng)開發(fā)轉(zhuǎn)變成以構(gòu)件庫為中心的開發(fā),實(shí)現(xiàn)動態(tài)地組裝構(gòu)件從而完成軟件的即插即用。構(gòu)件資源庫可以是任何已有的或待開發(fā)的構(gòu)件,是對領(lǐng)域中某種功能的實(shí)現(xiàn),可以是共性的資源,也可以是特性的資源。
.NET中構(gòu)件是包含描述源碼中定義和引用類型和成員數(shù)據(jù)的程序集,面向.NET Framework的編譯器向所有的模塊和程序集嵌入元數(shù)據(jù),使.NET構(gòu)件成為自描述構(gòu)件,這種方式有助于構(gòu)件的無縫集成。.NET的開發(fā)環(huán)境可以根據(jù)服務(wù)器構(gòu)件程序集中的元數(shù)據(jù)了解服務(wù)器構(gòu)件里的類及其方法、屬性、接口及事件等信息,構(gòu)件的交互只依賴于.NET的基礎(chǔ)機(jī)制。.NET構(gòu)件支持語言互用性,在程序編碼時(shí)允許使用另一種語言所開發(fā)的構(gòu)件。
.NET應(yīng)用程序和應(yīng)用程序域通過消息進(jìn)行彼此的通信,.NET信道服務(wù)為此通信提供了基礎(chǔ)傳輸機(jī)制。.NET應(yīng)用程序配置文件相當(dāng)于COM中系統(tǒng)注冊表的作用,登記構(gòu)件的位置、構(gòu)件對象的激活類型和通信的信道配置等。.NET模型支持web服務(wù),其底層細(xì)節(jié)均由.NET框架完成,減少了對操作系統(tǒng)的依賴性。因此,.NET構(gòu)件之間的交互更簡便,給程序開發(fā)帶來了便利。作為構(gòu)件技術(shù)的.NET簡化了構(gòu)件軟件的開發(fā)和軟件構(gòu)件的部署,.NET構(gòu)件模型是一種更理想的軟件構(gòu)件模型。這些也就是在開發(fā)大型而復(fù)雜的應(yīng)用系統(tǒng)時(shí)建議使用.NET平臺的理由。
圖3 基于領(lǐng)域的應(yīng)用系統(tǒng)開發(fā)模型
圖4 面向領(lǐng)域的LEC應(yīng)用系統(tǒng)架構(gòu)
比如對于微軟推出的基于ASP.NET的PetShop以及現(xiàn)在具有廣泛應(yīng)用的圖書銷售系統(tǒng)、電子訂餐系統(tǒng)等電子商務(wù)類的應(yīng)用程序,他們在系統(tǒng)架構(gòu)上和功能上存在極大的相似性,如果逐一開發(fā),就會導(dǎo)致重復(fù)工作和效率低下。借助于.NET框架及其優(yōu)良的構(gòu)件模型,搭建一個(gè)面向領(lǐng)域的輕量級電子商務(wù)應(yīng)用系統(tǒng)(Lightweight Electronic Commerce, LEC)架構(gòu)。一般來說,該類應(yīng)用程序包括以下基本功能:用戶管理模塊、購物車模塊、訂單結(jié)算模塊、商品瀏覽模塊、商品管理模塊。對應(yīng)的LEC架構(gòu)如圖4所示。
其中,功能構(gòu)件庫中的構(gòu)件是可定制的,對于電子商務(wù)類門戶系統(tǒng),可以根據(jù)用戶的具體需求,應(yīng)用定制工具選取相應(yīng)的構(gòu)件。當(dāng)某個(gè)用戶的需求沒有相應(yīng)的構(gòu)件在構(gòu)件庫中存在時(shí),可以向構(gòu)件庫中添加相應(yīng)構(gòu)件,因此構(gòu)件庫是可擴(kuò)充的。采用定制工具這種可配置的體系結(jié)構(gòu),可以快速滿足用戶的需求,開發(fā)出滿足用戶的新系統(tǒng)。
良好的系統(tǒng)架構(gòu)和領(lǐng)域工程的思想可有效地提高軟件的可重用性和可維護(hù)性。本文通過對.NET框架多層系統(tǒng)架構(gòu)及構(gòu)件開發(fā)模型的分析,給出了面向領(lǐng)域的輕量級電子商務(wù)類應(yīng)用系統(tǒng)的構(gòu)件式開發(fā)架構(gòu),雖然不同領(lǐng)域有不同的特點(diǎn),但是基于.NET多層架構(gòu)領(lǐng)域模型的應(yīng)用系統(tǒng)開發(fā)的思路同樣適用于其它領(lǐng)域。
[1] 焦金丹, 胡金柱, 等. 基于軟件復(fù)用的領(lǐng)域分析和建模技術(shù)[J]. 微電子學(xué)與計(jì)算機(jī). 2006, 23(增刊):143-145.
[2] 曾誠. 高性能ASP.NET應(yīng)用程序的探討與研究[J]. 湖北大學(xué)學(xué)報(bào), 2004:22-26.
[3] 章利. 基于.NET的多層分布式企業(yè)應(yīng)用架構(gòu)的設(shè)計(jì)與實(shí)現(xiàn)[D]. 2007.
[4] 惠長江, 吳江. 軟件進(jìn)化研究綜述[J]. 計(jì)算機(jī)技術(shù)與發(fā)展, 2007, 17(4):196-200.
[5] 黃玉坤. 軟件復(fù)用技術(shù)及領(lǐng)域工程綜述[J]. 計(jì)算機(jī)與現(xiàn)代化, 2007(11):43-48.
[6] Jesse Liberty, Dan Hurwitz. Programming in ASP.NET[M].Wrox,2004.
[7] Jeffrey. Applied Microsoft.NET Framework programming[M]. Wintellect, 2003.
[8 ] Xuehong Dui, Jianxin Jiao, MitchellM Tseng. Architecture of Product Family for Mass Custiomization[J]. ICMIT,2000:437-443.
[9] BJOINER D.Software engineering 3 domains, requirements and software design[M]. Berlin: Springer, 2006.