《電子技術(shù)應(yīng)用》
您所在的位置:首頁(yè) > 其他 > 設(shè)計(jì)應(yīng)用 > 基于復(fù)用的構(gòu)件開(kāi)發(fā)模型的研究與應(yīng)用
基于復(fù)用的構(gòu)件開(kāi)發(fā)模型的研究與應(yīng)用
來(lái)源:微型機(jī)與應(yīng)用2010年第14期
亓慧艷1, 程建平2
1. 山東師范大學(xué)信息科學(xué)與工程學(xué)院, 山東 濟(jì)南 250014; 2. 中創(chuàng)軟件工程股份有限公司,
摘要: 提出了一種基于復(fù)用的構(gòu)件開(kāi)發(fā)模型,該模型解決了構(gòu)件內(nèi)部結(jié)構(gòu)和組織問(wèn)題,保證良好的功能職責(zé)劃分和關(guān)注點(diǎn)分離;保證構(gòu)件以規(guī)范化的方式提供對(duì)外服務(wù)接口和擴(kuò)展接口;保證構(gòu)件具有良好的擴(kuò)展性以及隨需應(yīng)變的能力。通過(guò)應(yīng)用該模型開(kāi)發(fā)了面向金融領(lǐng)域的客戶管理構(gòu)件,并將該構(gòu)件復(fù)用于具體的金融項(xiàng)目。實(shí)踐表明,該模型能提高軟件復(fù)用率,降低開(kāi)發(fā)難度,加快開(kāi)發(fā)速度。
Abstract:
Key words :

摘  要: 提出了一種基于復(fù)用的構(gòu)件開(kāi)發(fā)模型,該模型解決了構(gòu)件內(nèi)部結(jié)構(gòu)和組織問(wèn)題,保證良好的功能職責(zé)劃分和關(guān)注點(diǎn)分離;保證構(gòu)件以規(guī)范化的方式提供對(duì)外服務(wù)接口和擴(kuò)展接口;保證構(gòu)件具有良好的擴(kuò)展性以及隨需應(yīng)變的能力。通過(guò)應(yīng)用該模型開(kāi)發(fā)了面向金融領(lǐng)域的客戶管理構(gòu)件,并將該構(gòu)件復(fù)用于具體的金融項(xiàng)目。實(shí)踐表明,該模型能提高軟件復(fù)用率,降低開(kāi)發(fā)難度,加快開(kāi)發(fā)速度。
關(guān)鍵詞: 軟件工程; 軟件復(fù)用; 構(gòu)件; 構(gòu)件開(kāi)發(fā)模型; 基于構(gòu)件的軟件開(kāi)發(fā)

   隨著信息技術(shù)的飛速發(fā)展,各個(gè)行業(yè)對(duì)軟件的需求也迅速增長(zhǎng),軟件產(chǎn)品的規(guī)模不斷擴(kuò)大,復(fù)雜性也不斷提高,但目前軟件的開(kāi)發(fā)與生產(chǎn)能力卻相對(duì)不足,形成脫節(jié)現(xiàn)象,導(dǎo)致軟件危機(jī)。軟件復(fù)用是在軟件開(kāi)發(fā)中避免重復(fù)勞動(dòng)的解決方案,被視為解決軟件危機(jī)、提高軟件生產(chǎn)率和質(zhì)量的有效途徑[1]。
 軟件復(fù)用技術(shù)是軟件工程領(lǐng)域的一個(gè)研究熱點(diǎn)。復(fù)用概念的第一次引入是在1968年NATO軟件工程會(huì)議上,Mcllroy的論文“大量生產(chǎn)的軟件構(gòu)件”中[2]。近十幾年來(lái),隨著面向?qū)ο蠹夹g(shù)和分布式對(duì)象技術(shù)的出現(xiàn)并逐步成為主流技術(shù),為軟件復(fù)用提供了基本的技術(shù)支持。構(gòu)件模型是對(duì)構(gòu)件本質(zhì)特征的抽象描述,被視為實(shí)現(xiàn)成功復(fù)用的關(guān)鍵因素之一。構(gòu)件是核心和基礎(chǔ),復(fù)用是必需的手段[3]。盡管軟件復(fù)用的概念自提出以來(lái)已取得了一定的成果,然而在實(shí)際軟件生產(chǎn)中,真正成功的軟件復(fù)用項(xiàng)目并不多見(jiàn)。主要原因是受可復(fù)用構(gòu)件的分析和設(shè)計(jì)方法的限制,針對(duì)此問(wèn)題本文提出了一種基于復(fù)用的構(gòu)件開(kāi)發(fā)模型,即(表現(xiàn)層、業(yè)務(wù)邏輯層、持久化層)的分層設(shè)計(jì)模型。
 本文中提出的構(gòu)件開(kāi)發(fā)模型規(guī)范和約束構(gòu)件的結(jié)構(gòu),保證了良好的功能職責(zé)劃分,保證構(gòu)件以規(guī)范化的方式提供對(duì)外服務(wù)接口和擴(kuò)展接口。對(duì)于復(fù)雜系統(tǒng),需求變化不穩(wěn)定,為使設(shè)計(jì)具有更好的可擴(kuò)展性、靈活性與邏輯性,通過(guò)分層分而治之,使其關(guān)注點(diǎn)分離。在設(shè)計(jì)中使用模塊增進(jìn)了內(nèi)聚性,降低了耦合度,進(jìn)而降低了復(fù)雜性并增強(qiáng)了可維護(hù)性。通過(guò)應(yīng)用該模型開(kāi)發(fā)了面向金融領(lǐng)域的客戶管理構(gòu)件,并將該構(gòu)件復(fù)用于具體的金融項(xiàng)目。最后,通過(guò)將傳統(tǒng)的軟件開(kāi)發(fā)方法與基于復(fù)用的構(gòu)件開(kāi)發(fā)模型方法進(jìn)行比較。
1 軟件復(fù)用與軟件構(gòu)件
1.1 軟件復(fù)用的基本概念

 軟件復(fù)用是指重復(fù)使用“為了復(fù)用目的而設(shè)計(jì)的軟件”的過(guò)程[4]。軟件復(fù)用是在軟件開(kāi)發(fā)中避免重復(fù)勞動(dòng)的解決方案,它包括對(duì)軟件生產(chǎn)過(guò)程中其他勞動(dòng)成果的復(fù)用,如需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、測(cè)試用例和使用手冊(cè)等。
1.2 實(shí)現(xiàn)軟件復(fù)用的關(guān)鍵因素
   實(shí)現(xiàn)軟件復(fù)用的關(guān)鍵因素如圖1所示,主要包括:軟件構(gòu)件技術(shù)、領(lǐng)域工程、軟件構(gòu)架、軟件再工程、開(kāi)放系統(tǒng)、軟件過(guò)程、CASE技術(shù)等,以及各種非技術(shù)因素[5]。本文主要研究軟件構(gòu)件技術(shù)對(duì)實(shí)現(xiàn)軟件復(fù)用的影響。

1.3 構(gòu)件的基本概念
 在眾多的軟件復(fù)用開(kāi)發(fā)方法中,基于構(gòu)件的軟件開(kāi)發(fā)方法是一條有效、實(shí)際的軟件復(fù)用途徑,所謂構(gòu)件是指系統(tǒng)中可以明確辨識(shí)的構(gòu)成成分,軟件構(gòu)件是系統(tǒng)中具有一定意義的獨(dú)立構(gòu)成成份[6]。
 構(gòu)件應(yīng)具備的基本特征:(1)復(fù)用:復(fù)用是構(gòu)件最基本的性質(zhì),構(gòu)件的設(shè)計(jì)必須滿足能在新的應(yīng)用項(xiàng)目中使用;(2)封裝:封裝對(duì)外界隱藏構(gòu)件的設(shè)計(jì)和實(shí)現(xiàn)細(xì)節(jié),僅通過(guò)接口與外界交互,可以保證構(gòu)件功能復(fù)用的完整性和構(gòu)件開(kāi)發(fā)及交付的獨(dú)立性;(3)組裝:構(gòu)件可以通過(guò)組裝形成新的構(gòu)件或系統(tǒng),組裝是構(gòu)件復(fù)用的手段;(4)粒度:構(gòu)件是有大小的,與領(lǐng)域相關(guān)的構(gòu)件粒度大;(5)層次:構(gòu)件可以按層次進(jìn)行劃分,企業(yè)級(jí)應(yīng)用系統(tǒng)的復(fù)雜邏輯可以通過(guò)分層來(lái)解決。
1.4 可復(fù)用構(gòu)件開(kāi)發(fā)遵循的基本原則
   (1)“開(kāi)-閉”原則:一個(gè)軟件實(shí)體應(yīng)該對(duì)擴(kuò)展開(kāi)放,對(duì)修改關(guān)閉。所謂“開(kāi)”,就是要求構(gòu)件能適應(yīng)不同的應(yīng)用環(huán)境;所謂“閉”,就是要求構(gòu)件是一個(gè)獨(dú)立的整體。這是可復(fù)用構(gòu)件開(kāi)發(fā)最基本的原則,也是復(fù)用要求的直接體現(xiàn)。實(shí)現(xiàn)“開(kāi)-閉”原則的基本策略是對(duì)變化性進(jìn)行封裝,即找到構(gòu)件的可變因素,并將其封裝起來(lái)。
   (2)依賴倒置原則:要針對(duì)接口編程,不要針對(duì)實(shí)現(xiàn)編程。它是指導(dǎo)開(kāi)發(fā)可復(fù)用框架的基本原則,使得框架無(wú)需依賴具體構(gòu)件,具體構(gòu)件的開(kāi)發(fā)需遵循框架設(shè)定的約束。實(shí)現(xiàn)依賴倒置原則的基本策略是在框架中為具體構(gòu)件設(shè)立抽象表示。
   (3)接口隔離原則:是一個(gè)指導(dǎo)可復(fù)用構(gòu)件實(shí)現(xiàn)接口設(shè)計(jì)的原則,它使得構(gòu)件中每一個(gè)實(shí)體都擁有盡可能簡(jiǎn)單的接口。實(shí)現(xiàn)接口隔離原則的基本策略是對(duì)構(gòu)件中的每個(gè)角色進(jìn)行劃分,然后針對(duì)每一類(lèi)使用者提供一套有針對(duì)性的接口。
   (4)迪米特法則:每個(gè)軟件實(shí)體應(yīng)當(dāng)盡可能少地與其他實(shí)體發(fā)生相互作用[7]。實(shí)現(xiàn)迪米特法則的基本策略是控制軟件實(shí)體間由于信息傳遞而產(chǎn)生的耦合關(guān)系。
2 構(gòu)件開(kāi)發(fā)模型
   構(gòu)件模型是對(duì)構(gòu)件本質(zhì)特性的抽象描述[8]。本文提出一種構(gòu)件分層設(shè)計(jì)模型,如圖2 所示,該模型解決了構(gòu)件內(nèi)部結(jié)構(gòu)和組織問(wèn)題,保證良好的功能職責(zé)劃分,保證構(gòu)件以規(guī)范化的方式提供對(duì)外服務(wù)接口和擴(kuò)展接口,保證構(gòu)件具有良好的擴(kuò)展性以及隨需應(yīng)變的能力。該模型遵循本文中上面所提出的可復(fù)用構(gòu)件開(kāi)發(fā)的基本原則,在設(shè)計(jì)中使用模塊,增進(jìn)了內(nèi)聚性,降低了耦合度,低耦合降低了復(fù)雜性并增強(qiáng)了可維護(hù)性。對(duì)于復(fù)雜系統(tǒng),需求變化不穩(wěn)定,為使設(shè)計(jì)具有更好的可擴(kuò)展性、靈活性與邏輯性,通過(guò)分層分而治之,主要分為表現(xiàn)層、業(yè)務(wù)邏輯層、持久化層,使其關(guān)注點(diǎn)分離。API(Application Programming Interface)接口是外部調(diào)用者;MAI(Management Application Interface)接口是內(nèi)部調(diào)用者;SPI(Service Provider Interface)接口是構(gòu)件本身的可擴(kuò)展點(diǎn),通過(guò)分層帶來(lái)更好的可伸縮性與可維護(hù)性。其中,表現(xiàn)層又叫展現(xiàn)層,主要功能是向人展示,最終實(shí)現(xiàn)人機(jī)交互。一般表現(xiàn)層與具體的業(yè)務(wù)需求有關(guān),需具體問(wèn)題具體分析,在此就不再詳細(xì)介紹,下面主要介紹業(yè)務(wù)邏輯層設(shè)計(jì)模型和持久化層設(shè)計(jì)模型。

2.1 業(yè)務(wù)邏輯層設(shè)計(jì)模型
   業(yè)務(wù)邏輯層設(shè)計(jì)模型如圖3所示。業(yè)務(wù)邏輯層根據(jù)職責(zé)具體分為服務(wù)層和領(lǐng)域?qū)樱?1)Service服務(wù)層定義了應(yīng)用的邊界和從客戶角度所能看到的可用操作集。①它包括實(shí)體home即Entity Home和流程管理,由Normal Service實(shí)現(xiàn);②它是無(wú)狀態(tài)類(lèi),不包含任何業(yè)務(wù)邏輯,定義了一個(gè)公共的應(yīng)用操作集合,可供各種使用者使用。(2)領(lǐng)域?qū)拥闹饕氊?zé)是實(shí)現(xiàn)業(yè)務(wù)邏輯,它包含API層和MAI層。①API層遵循最小化設(shè)計(jì)原則,在完成功能的前提下盡可能簡(jiǎn)單,提供相對(duì)穩(wěn)定的接口,減少改動(dòng)帶來(lái)的影響,易于使用;EntityAPIWrapper:實(shí)現(xiàn)API接口,避免對(duì)外暴露MAI接口,實(shí)現(xiàn)延遲加載等;②MAI層是內(nèi)部調(diào)用者,EntityMAI:定義可以對(duì)外提供的服務(wù)和職責(zé);EntityMAIBase:提供基本共性實(shí)現(xiàn);EntityMAIImp:為內(nèi)部調(diào)用者提供服務(wù),調(diào)用SPI層實(shí)現(xiàn)持久化。
 

2.2 持久化層設(shè)計(jì)模型
   持久化層設(shè)計(jì)模型,如圖4所示,持久化層主要功能是實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ)、讓客戶了解功能的擴(kuò)展點(diǎn)和為業(yè)務(wù)邏輯層提供服務(wù)。(1)SPI接口:定義抽象共性的方法;(2)Base實(shí)現(xiàn)類(lèi):定義共性的方法,對(duì)對(duì)象進(jìn)行延遲加載;(3)JDBC實(shí)現(xiàn)類(lèi):負(fù)責(zé)與數(shù)據(jù)庫(kù)交互;降低對(duì)底端的依賴,增強(qiáng)變化性;(4)Wrapper實(shí)現(xiàn)類(lèi):負(fù)責(zé)創(chuàng)建對(duì)象時(shí)對(duì)返回的對(duì)象進(jìn)行包裝,對(duì)日志、緩存和關(guān)系邏輯進(jìn)行處理,在批處理過(guò)程中可以結(jié)合cache及Pool進(jìn)行預(yù)加載。

3 基于構(gòu)件的軟件復(fù)用開(kāi)發(fā)實(shí)例
 結(jié)合本人在中創(chuàng)軟件公司實(shí)習(xí)中參與的項(xiàng)目實(shí)踐,本文應(yīng)用該模型開(kāi)發(fā)了面向金融領(lǐng)域的客戶管理構(gòu)件,保證構(gòu)件以規(guī)范化的方式提供對(duì)外服務(wù)接口和擴(kuò)展接口,保證構(gòu)件具有良好的擴(kuò)展性以及隨需應(yīng)變的能力,并將該構(gòu)件復(fù)用于具體的金融項(xiàng)目,降低了開(kāi)發(fā)難度,加快了開(kāi)發(fā)速度,能夠較好地解決復(fù)用這一問(wèn)題,能夠從構(gòu)件開(kāi)發(fā)模型結(jié)構(gòu)的高度指導(dǎo)構(gòu)件的開(kāi)發(fā)和靈活復(fù)用。
3.1 客戶管理構(gòu)件
 客戶管理構(gòu)件是用于對(duì)客戶信息與客戶間相互關(guān)系進(jìn)行管理維護(hù)的構(gòu)件,提供統(tǒng)一的客戶管理功能,提供可視化的客戶信息定義,滿足個(gè)性化需求。不同行業(yè)、不同的企業(yè)對(duì)客戶信息的管理內(nèi)容千變?nèi)f化,客戶管理構(gòu)件是面向領(lǐng)域的構(gòu)件,本文中所研究的是面向金融領(lǐng)域。客戶管理構(gòu)件總體上分為以下幾個(gè)模塊:
   (1)客戶類(lèi)型管理:客戶類(lèi)型可配置,通過(guò)類(lèi)型管理具有相同屬性的客戶集合;
   (2)客戶組類(lèi)型和組管理:通過(guò)組來(lái)管理具有不同特征的客戶集合;
   (3)客戶信息維護(hù):通過(guò)客戶類(lèi)型,對(duì)客戶信息的增加、刪除、修改、查詢和版本控制等進(jìn)行統(tǒng)一維護(hù);
   (4)客戶關(guān)系維護(hù):管理不同類(lèi)型客戶之間的相互關(guān)系。
3.2 金融租賃客戶管理系統(tǒng)
   利用客戶管理構(gòu)件,針對(duì)金融租賃客戶管理系統(tǒng)項(xiàng)目具體需求,支持該項(xiàng)目客戶管理系統(tǒng)的開(kāi)發(fā)。金融租賃客戶管理系統(tǒng)包含的主要子領(lǐng)域及其相互之間的依賴關(guān)系如圖5所示,各個(gè)子領(lǐng)域的簡(jiǎn)要說(shuō)明如下:

   (1)客戶信息查詢與維護(hù):該領(lǐng)域封裝了通過(guò)客戶類(lèi)型對(duì)客戶信息表中記錄的查詢、增加、刪除、修改及維護(hù)功能;
   (2)個(gè)人客戶管理:主要負(fù)責(zé)對(duì)金融租賃領(lǐng)域中涉及的自然人的信息進(jìn)行管理;
   (3)對(duì)公客戶管理:主要負(fù)責(zé)對(duì)金融租賃領(lǐng)域中涉及的組織機(jī)構(gòu)進(jìn)行管理;
   (4)集團(tuán)客戶管理:主要負(fù)責(zé)對(duì)兩個(gè)或兩個(gè)以上客戶成員團(tuán)體的信息進(jìn)行管理;
   (5)同業(yè)客戶管理:主要負(fù)責(zé)對(duì)金融機(jī)構(gòu)客戶的信息進(jìn)行管理;
   (6)部門(mén)及管護(hù)員調(diào)整:主要負(fù)責(zé)對(duì)客戶部門(mén)、經(jīng)理發(fā)生變動(dòng)的信息進(jìn)行管理;
   (7)客戶信息數(shù)據(jù)庫(kù):主要負(fù)責(zé)對(duì)整個(gè)客戶管理信息領(lǐng)域中涉及的各種客戶信息以及其他相關(guān)信息進(jìn)行存儲(chǔ)并提供訪問(wèn)接口。
 在金融租賃客戶管理系統(tǒng)中運(yùn)用了大量的構(gòu)件,主要有:用戶權(quán)限管理構(gòu)件、參數(shù)管理構(gòu)件、元數(shù)據(jù)管理構(gòu)件、財(cái)務(wù)報(bào)表管理構(gòu)件、評(píng)級(jí)管理構(gòu)件、內(nèi)容管理構(gòu)件等。構(gòu)件代碼比例約占62.3%,新增構(gòu)件約占28.6%,構(gòu)件化比例相當(dāng)大,使原本半年的開(kāi)發(fā)時(shí)間縮短為兩個(gè)月,減少了開(kāi)發(fā)成本,提高了軟件開(kāi)發(fā)效率和產(chǎn)品的質(zhì)量,減少了系統(tǒng)的維護(hù)代價(jià)。為了更好地說(shuō)明此構(gòu)件開(kāi)發(fā)模型的優(yōu)勢(shì),將傳統(tǒng)的軟件開(kāi)發(fā)方法與基于復(fù)用的構(gòu)件開(kāi)發(fā)模型方法進(jìn)行比較,統(tǒng)計(jì)結(jié)果如表1所示,實(shí)踐表明,基于本文提出的模型開(kāi)發(fā)的構(gòu)件降低了開(kāi)發(fā)難度,加快了開(kāi)發(fā)速度,較好地解決了復(fù)用的問(wèn)題。
4 總結(jié)與展望
    本文提出一種基于復(fù)用的構(gòu)件開(kāi)發(fā)模型,該模型規(guī)范和約束了構(gòu)件的內(nèi)部結(jié)構(gòu),保證構(gòu)件以規(guī)范化的方式提供對(duì)外服務(wù)接口和擴(kuò)展接口;保證構(gòu)件具有良好的擴(kuò)展性以及隨需應(yīng)變的能力;將該開(kāi)發(fā)模型應(yīng)用于客戶管理構(gòu)件開(kāi)發(fā),并基于該構(gòu)件復(fù)用于金融租賃客戶管理系統(tǒng)。通過(guò)實(shí)踐對(duì)比表明,使用該構(gòu)件開(kāi)發(fā)模型降低了開(kāi)發(fā)難度,加快了開(kāi)發(fā)速度,能夠較好地解決復(fù)用這一問(wèn)題。由于構(gòu)件開(kāi)發(fā)涉及領(lǐng)域繁多,該構(gòu)件開(kāi)發(fā)模型還有很多不足之處,還有待于在實(shí)踐中繼續(xù)完善。
參考文獻(xiàn)
[1]  楊芙清,梅宏,李克勤.軟件復(fù)用與軟件構(gòu)件技術(shù)[J]. 電子學(xué)報(bào),1999, 27(2): 68-75.
[2]  MILI H. IEEE transactions on software Engineering, June 1995, 21(6):528-562.
[3]  MCCLURE C. Software reuse: a standards-based guide[C].Wiley-IEEE Computer Society, 2001.
[4]  WALLNAU B. The current state of CBSE[J]. IEEE Soft-ware, 1998,15(5):37-46.
[5]  PRESSMAN R S. Software engineering: a practitioner’s approach [M]. 北京: 機(jī)械工業(yè)出版社, 2005.
[6]  楊芙清,梅 宏. 面向復(fù)用的需求建模[M].北京:清華大學(xué)出版社, 2008.
[7]  閻宏. Java與模式[M].北京:電子工業(yè)出版社,2002.
[8]  EVANS E. Domain-driven design: tackling complexity in  the Heart of Software[M]. Addison Wesley, 2006.

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。