• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于MEF的軟件可復(fù)用框架設(shè)計(jì)與實(shí)現(xiàn)

    2014-04-29 00:00:00蔡君胡偉

    摘 要:近來(lái),基于框架的軟件開發(fā)扮演著一個(gè)重要的角色。軟件框架提供了一種標(biāo)準(zhǔn)的模式在相對(duì)較短的時(shí)間內(nèi)構(gòu)建應(yīng)用程序。本文將探討一個(gè)基于.NET MEF技術(shù)的框架的設(shè)計(jì)和實(shí)現(xiàn)。為追求一個(gè)更好的框架設(shè)計(jì),不同的設(shè)計(jì)模式也被廣泛應(yīng)用在框架中。

    關(guān)鍵詞:基于框架的軟件開發(fā);軟件框架;MEF

    中圖分類號(hào):TP311.52

    軟件復(fù)用一直是軟件業(yè)重要的研究領(lǐng)域,而其中軟件框架作為一種高級(jí)別軟件復(fù)用手段也在各個(gè)領(lǐng)域得到應(yīng)有和發(fā)展。相比建立通用類庫(kù)來(lái)實(shí)現(xiàn)代碼復(fù)用,軟件框架是在一個(gè)更高級(jí)別上的抽象。

    基于UML軟件工程組織給出的定義??蚣埽‵ramework)是整個(gè)或部分系統(tǒng)的可重用設(shè)計(jì),表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方法;另一種定義認(rèn)為,框架是可被應(yīng)用開發(fā)者定制的應(yīng)用骨架。前者是從應(yīng)用方面而后者是從目的方面給出的定義。

    一個(gè)框架是一個(gè)可復(fù)用的設(shè)計(jì)構(gòu)件,它規(guī)定了應(yīng)用的體系結(jié)構(gòu),闡明了整個(gè)設(shè)計(jì)、協(xié)作構(gòu)件之間的依賴關(guān)系、責(zé)任分配和控制流程,表現(xiàn)為一組抽象類以及其實(shí)例之間協(xié)作的方法,它為構(gòu)件復(fù)用提供了上下文(Context)關(guān)系。因此構(gòu)件庫(kù)的大規(guī)模重用也需要框架。

    在某種程度上,將構(gòu)件和框架看成兩個(gè)不同但彼此協(xié)作的技術(shù)或許更好。框架為構(gòu)件提供重用的環(huán)境,為構(gòu)件處理錯(cuò)誤、交換數(shù)據(jù)及激活操作提供了標(biāo)準(zhǔn)的方法。

    設(shè)計(jì)一個(gè)的軟件框架,需要考慮系統(tǒng)的健壯性,擴(kuò)展性,安全性等多種因素。同時(shí)選擇合適的工具和設(shè)計(jì)模式也是非常關(guān)鍵,并且框架還需要在運(yùn)行實(shí)踐中不斷完善。所以完成一個(gè)優(yōu)秀的軟件框架是一個(gè)復(fù)雜且長(zhǎng)期的過(guò)程。

    本文將探討一種基于.NET平臺(tái)MEF(Managed Extensibility Framework)的應(yīng)用框架,的設(shè)計(jì)方法和具體實(shí)現(xiàn)。

    1 MEF的基本概念

    MEF(Managed Extensibility Framework)是.NET Framework 4.0的一個(gè)重要的庫(kù)。它的目標(biāo)是簡(jiǎn)化創(chuàng)建可擴(kuò)展的應(yīng)用程序。其核心組件是ComposablePart(可組合構(gòu)件),它由ComposablePartDefintion來(lái)描述和創(chuàng)建。每一個(gè)可組合組件通過(guò)定義ExportDefintion向其它組件提供功能,通過(guò)ImportDefinition引用其它組件的功能,通過(guò)Metadata來(lái)描述組件自身的信息。在創(chuàng)建一個(gè)ComposablePart組件后,通過(guò)在組件目錄(ComposableCatalog)搜索需要的功能實(shí)現(xiàn)組件組合。

    MEF組件通過(guò)使用特性來(lái)實(shí)現(xiàn)導(dǎo)入和導(dǎo)出。由于MEF的部件是以聲明方式指定其功能,因此在運(yùn)行時(shí)可發(fā)現(xiàn)這些部件。這意味著,應(yīng)用程序無(wú)需硬編碼的引用或脆弱的配置文件即可利用相關(guān)部件。通過(guò)MEF,應(yīng)用程序可以通過(guò)部件的元數(shù)據(jù)來(lái)發(fā)現(xiàn)并檢查部件,而不用實(shí)例化部件,或者甚至不用加載部件的程序集。

    2 可復(fù)用框架的設(shè)計(jì)

    本文所介紹的應(yīng)用軟件框架主要使用三層架構(gòu)。如圖1所示。界面表示層,業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層,各層分離有助于實(shí)現(xiàn)框架的重構(gòu)和跨平臺(tái)。比如,界面表示層從Windows窗體轉(zhuǎn)變成用Web形式展示,業(yè)務(wù)邏輯層和數(shù)據(jù)訪問(wèn)層可能只需要微小的改動(dòng)甚至不需要改動(dòng)就能實(shí)現(xiàn)。

    2.1 界面表示層的設(shè)計(jì)

    界面表示層用來(lái)提供用戶界面來(lái)訪問(wèn)框架以及外部構(gòu)建的功能和服務(wù)。該層的設(shè)計(jì)主要才用MVP模式,進(jìn)一步將界面展示和后臺(tái)邏輯分離。所有純粹的界面都集中在View中,界面上用戶請(qǐng)求的數(shù)據(jù)則通過(guò)Presenter從Model中獲取并返回給View。另外,MVP模式還有另一種實(shí)現(xiàn)形式,除了Model,View和Presenter還加入一個(gè)Controller以便將不同界面的交互通信都集中到Controller中來(lái)實(shí)現(xiàn)。采用MVP模式將界面和后臺(tái)邏輯分離,可以撇開界面,以最小的代價(jià)實(shí)現(xiàn)對(duì)界面后臺(tái)邏輯的單元測(cè)試。

    界面表示層包含兩類界面(View)。一類界面是對(duì)框架本身的界面,如登錄界面,主界面,用戶及權(quán)限管理和配置管理等;另一類界面是構(gòu)建容器界面,主要用來(lái)加載外部構(gòu)件,擴(kuò)展系統(tǒng)功能。

    2.2 業(yè)務(wù)邏輯層的設(shè)計(jì)

    業(yè)務(wù)邏輯層主要包含框架了具體邏輯的實(shí)現(xiàn),包括外部構(gòu)件管理、用戶管理、身份認(rèn)證管理和配置管理。

    (1)核心模塊是外部構(gòu)件管理模塊,它主要負(fù)責(zé)外部構(gòu)件的動(dòng)態(tài)加載和卸載。該模塊主要基于.NET Framework中的MEF技術(shù)來(lái)實(shí)現(xiàn)。它主要有兩部分組成。一部分是外部構(gòu)件的導(dǎo)入導(dǎo)出管理,其主要負(fù)責(zé)創(chuàng)建MEF的組件目錄和組合容器等。另一部分是面向外部構(gòu)件的接口,即定義外部構(gòu)件所要遵守的契約以及框架提供給構(gòu)件的服務(wù)的接口。

    外部構(gòu)件管理模塊使用成熟的MEF來(lái)管理外部控件,相比從零開發(fā)可以減少代碼開發(fā)和功能測(cè)試的精力,縮短框架的開發(fā)周期。它作為核心模塊,對(duì)外提供了功能擴(kuò)展點(diǎn)?;诳蚣荛_發(fā)的應(yīng)用只需關(guān)注于MEF構(gòu)件的開發(fā),通過(guò)插拔構(gòu)件動(dòng)態(tài)的配置應(yīng)用程序所需的功能。

    (2)用戶管理模塊,主要負(fù)責(zé)用戶以及相應(yīng)權(quán)限的管理。該模塊的設(shè)計(jì)主要是考慮用戶和組以及組的權(quán)限都是可配置的,需要通過(guò)數(shù)據(jù)訪問(wèn)層來(lái)實(shí)現(xiàn)配置的持久化。用戶的認(rèn)證(或者叫登錄管理)的設(shè)計(jì)則需要考慮到將來(lái)對(duì)用戶登錄方式的擴(kuò)展,這里需要用到設(shè)計(jì)模式中的策略模式(Strategy)來(lái)實(shí)現(xiàn)。這種需要定義一個(gè)抽象類并包含一個(gè)或多個(gè)抽象方法,然后不同的算法來(lái)具體實(shí)現(xiàn)抽象類定義的抽象方法。當(dāng)有新的算法加入,只需要新增子類,而不需要修改現(xiàn)有類。如圖2所示。

    2.3 數(shù)據(jù)訪問(wèn)層的設(shè)計(jì)

    數(shù)據(jù)訪問(wèn)層主要負(fù)責(zé)對(duì)數(shù)據(jù)源和外部服務(wù)的訪問(wèn)。數(shù)據(jù)訪問(wèn)層的設(shè)計(jì)主要要注意以下四個(gè)職責(zé):

    (1)數(shù)據(jù)訪問(wèn)層應(yīng)該提供基本的持久化操作CRUD的操作。

    (2)提供能夠滿足類中信息的讀取操作。

    (3)數(shù)據(jù)庫(kù)訪問(wèn)必須提供事務(wù)的管理,特別是批量持久化的過(guò)程中,事務(wù)不但能夠減少與數(shù)據(jù)庫(kù)操作的次數(shù),而且根據(jù)事務(wù)的四個(gè)特性可以提供更好的安全性。

    (4)數(shù)據(jù)訪問(wèn)層必須提供處理并發(fā)的功能。

    應(yīng)用框架的數(shù)據(jù)訪問(wèn)層需要做到獨(dú)立于具體數(shù)據(jù)源(包括數(shù)據(jù)庫(kù)和文件等),即實(shí)現(xiàn)低耦合度。這就需要使用面向接口編程,將對(duì)數(shù)據(jù)庫(kù)的CRUD的方法都定義到接口上,利用工廠方法模式動(dòng)態(tài)的根據(jù)配置創(chuàng)建所需要的數(shù)據(jù)庫(kù)實(shí)現(xiàn)。如圖3所示。另外創(chuàng)建具體的數(shù)據(jù)庫(kù)操作的實(shí)例可以選擇兩種方式:1)工廠類根據(jù)讀取的配置利用反射技術(shù)來(lái)創(chuàng)建對(duì)應(yīng)的實(shí)例。2)利用控制反轉(zhuǎn)(IoC,Inversion of Control)工具來(lái)創(chuàng)建出實(shí)例,如Unity。

    2.4 交叉層的設(shè)計(jì)

    在三層架構(gòu)的設(shè)計(jì)中都會(huì)有一些獨(dú)立的組件會(huì)被三層所調(diào)用如日志組件、異常處理、實(shí)例類庫(kù)、全球化和本地化的組件等。這些組件一般都會(huì)放在交叉層(Cross cutting)。這些組件比較通用的,往往是可以使用一些開源的組件,比如日志和異常處理等可以直接復(fù)用微軟提供的企業(yè)庫(kù)(Enterprise Library),或根據(jù)自己的需要修改。

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

    框架的本質(zhì)在于提供一個(gè)可復(fù)用的軟件平臺(tái),同時(shí)提供必要的擴(kuò)展點(diǎn)來(lái)支持功能構(gòu)件的插拔。而基于框架的應(yīng)用程序的開發(fā),則只需要專注于外部構(gòu)件的實(shí)現(xiàn)。通過(guò)這樣方法,可以最大限度的復(fù)用框架提供的功能,縮短開發(fā)周期和開發(fā)成本。

    在框架的實(shí)際開發(fā)過(guò)程中,還會(huì)遇到各種問(wèn)題。比如如何有效隔離框架和外部構(gòu)件,在構(gòu)件產(chǎn)生異常是,框架本身能正常運(yùn)行;如何快速部署框架或者基于框架應(yīng)用程序等。應(yīng)用領(lǐng)域不同也會(huì)很大程度上對(duì)框架的設(shè)計(jì)和實(shí)現(xiàn)產(chǎn)生影響。總之,一個(gè)好的框架是領(lǐng)域經(jīng)驗(yàn)和設(shè)計(jì)經(jīng)驗(yàn)的反復(fù)迭代過(guò)程。

    參考文獻(xiàn):

    [1]李礁,李敏.基于工廠模式的易復(fù)用數(shù)據(jù)訪問(wèn)層設(shè)計(jì)[J].軟件導(dǎo)刊,2011(03).

    [2]王孝明,胡健,陸坤,周偉.基于.NET平臺(tái)可復(fù)用軟件框架的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2004(22).

    [3]吳毅堅(jiān),趙文耘.特定領(lǐng)域軟件框架的提取方法研究[J].電子學(xué)報(bào),2003(S1):2151-2153.

    [4]文俊浩,徐傳運(yùn),于楊,徐玲.基于廣義軟件框架的開發(fā)過(guò)程研究[J].計(jì)算機(jī)應(yīng)用研究,2006(05).

    [5]劉瑜,張世琨,王立福,楊芙清.基于構(gòu)件的軟件框架與角色擴(kuò)展形態(tài)研究[J].軟件學(xué)報(bào),2003(08).

    [6]王曉燕,劉淑芬,張俊.一種基于領(lǐng)域模型和構(gòu)件組合的軟件開發(fā)框架[J].電子學(xué)報(bào),2009(03).

    [7]王世安.基于敏捷開發(fā)的構(gòu)件化軟件可靠性研究[J].微電子學(xué)與計(jì)算機(jī),2011(03).

    [8]向俊蓮,楊杰,梅宏.基于軟件體系結(jié)構(gòu)的構(gòu)件組裝工具ABC-Tool[J].計(jì)算機(jī)研究與發(fā)展,2004(06).

    [9]柴晟,李明富,羅莉娟,劉旗超.基于設(shè)計(jì)模式構(gòu)建數(shù)據(jù)訪問(wèn)中間件[J].計(jì)算機(jī)工程與設(shè)計(jì),2007(17).

    [10]王玲,夏榆濱.基于構(gòu)件視圖的組裝技術(shù)[J].計(jì)算機(jī)應(yīng)用,2009(12).

    [11]胡文蕙,王立福,張世坤.軟件框架研究與實(shí)踐[C].2001全國(guó)軟件技術(shù)研討會(huì),2001.

    [12]胡霞.基于構(gòu)件的可復(fù)用軟件框架的研究與設(shè)計(jì)[J].電腦編程技巧與維護(hù),2009(24).

    [13]Stefano De Panfilis, Arne J. Berre. Open issues and concerns on Component Based Software Engineering [S.1.]. Deliverable of results of CBSEnet IST-2001-35485,2005.

    [14]Nasib S. Gill. Reusability issues in component-based development[S.1.],ACM SIGSOFT Software Engineering Notes,v.28 n.4,July 2003.

    作者簡(jiǎn)介:蔡君(1983-),男,畢業(yè)于南京工業(yè)大學(xué),學(xué)士學(xué)位,現(xiàn)主攻軟件工程碩士學(xué)位,高級(jí)工程師,研究方向:軟件工程;胡偉(1988-),男,畢業(yè)于蘇州大學(xué),學(xué)士學(xué)位,現(xiàn)主攻軟件工程碩士學(xué)位,工程師,研究方向:軟件工程。

    作者單位:蘇州大學(xué) 計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院,江蘇蘇州 215006

    疏附县| 工布江达县| 张北县| 临漳县| 井研县| 内乡县| 兰州市| 旌德县| 眉山市| 榆社县| 襄垣县| 临汾市| 衢州市| 麻城市| 余姚市| 汪清县| 贵定县| 诸城市| 桐柏县| 湘潭县| 西安市| 辰溪县| 察隅县| 彭山县| 随州市| 吴旗县| 临泉县| 平武县| 宁波市| 靖州| 长乐市| 田东县| 崇文区| 英吉沙县| 顺昌县| 榕江县| 房产| 临泽县| 砚山县| 邓州市| 宜城市|