摘 要: 提出了一種基于復用的構(gòu)件開發(fā)模型,該模型解決了構(gòu)件內(nèi)部結(jié)構(gòu)和組織問題,保證良好的功能職責劃分和關(guān)注點分離;保證構(gòu)件以規(guī)范化的方式提供對外服務接口和擴展接口;保證構(gòu)件具有良好的擴展性以及隨需應變的能力。通過應用該模型開發(fā)了面向金融領(lǐng)域的客戶管理構(gòu)件,并將該構(gòu)件復用于具體的金融項目。實踐表明,該模型能提高軟件復用率,降低開發(fā)難度,加快開發(fā)速度。
關(guān)鍵詞: 軟件工程; 軟件復用; 構(gòu)件; 構(gòu)件開發(fā)模型; 基于構(gòu)件的軟件開發(fā)
隨著信息技術(shù)的飛速發(fā)展,各個行業(yè)對軟件的需求也迅速增長,軟件產(chǎn)品的規(guī)模不斷擴大,復雜性也不斷提高,但目前軟件的開發(fā)與生產(chǎn)能力卻相對不足,形成脫節(jié)現(xiàn)象,導致軟件危機。軟件復用是在軟件開發(fā)中避免重復勞動的解決方案,被視為解決軟件危機、提高軟件生產(chǎn)率和質(zhì)量的有效途徑[1]。
軟件復用技術(shù)是軟件工程領(lǐng)域的一個研究熱點。復用概念的第一次引入是在1968年NATO軟件工程會議上,Mcllroy的論文“大量生產(chǎn)的軟件構(gòu)件”中[2]。近十幾年來,隨著面向?qū)ο蠹夹g(shù)和分布式對象技術(shù)的出現(xiàn)并逐步成為主流技術(shù),為軟件復用提供了基本的技術(shù)支持。構(gòu)件模型是對構(gòu)件本質(zhì)特征的抽象描述,被視為實現(xiàn)成功復用的關(guān)鍵因素之一。構(gòu)件是核心和基礎,復用是必需的手段[3]。盡管軟件復用的概念自提出以來已取得了一定的成果,然而在實際軟件生產(chǎn)中,真正成功的軟件復用項目并不多見。主要原因是受可復用構(gòu)件的分析和設計方法的限制,針對此問題本文提出了一種基于復用的構(gòu)件開發(fā)模型,即(表現(xiàn)層、業(yè)務邏輯層、持久化層)的分層設計模型。
本文中提出的構(gòu)件開發(fā)模型規(guī)范和約束構(gòu)件的結(jié)構(gòu),保證了良好的功能職責劃分,保證構(gòu)件以規(guī)范化的方式提供對外服務接口和擴展接口。對于復雜系統(tǒng),需求變化不穩(wěn)定,為使設計具有更好的可擴展性、靈活性與邏輯性,通過分層分而治之,使其關(guān)注點分離。在設計中使用模塊增進了內(nèi)聚性,降低了耦合度,進而降低了復雜性并增強了可維護性。通過應用該模型開發(fā)了面向金融領(lǐng)域的客戶管理構(gòu)件,并將該構(gòu)件復用于具體的金融項目。最后,通過將傳統(tǒng)的軟件開發(fā)方法與基于復用的構(gòu)件開發(fā)模型方法進行比較。
1 軟件復用與軟件構(gòu)件
1.1 軟件復用的基本概念
軟件復用是指重復使用“為了復用目的而設計的軟件”的過程[4]。軟件復用是在軟件開發(fā)中避免重復勞動的解決方案,它包括對軟件生產(chǎn)過程中其他勞動成果的復用,如需求分析、概要設計、詳細設計、編碼、測試用例和使用手冊等。
1.2 實現(xiàn)軟件復用的關(guān)鍵因素
實現(xiàn)軟件復用的關(guān)鍵因素如圖1所示,主要包括:軟件構(gòu)件技術(shù)、領(lǐng)域工程、軟件構(gòu)架、軟件再工程、開放系統(tǒng)、軟件過程、CASE技術(shù)等,以及各種非技術(shù)因素[5]。本文主要研究軟件構(gòu)件技術(shù)對實現(xiàn)軟件復用的影響。
1.3 構(gòu)件的基本概念
在眾多的軟件復用開發(fā)方法中,基于構(gòu)件的軟件開發(fā)方法是一條有效、實際的軟件復用途徑,所謂構(gòu)件是指系統(tǒng)中可以明確辨識的構(gòu)成成分,軟件構(gòu)件是系統(tǒng)中具有一定意義的獨立構(gòu)成成份[6]。
構(gòu)件應具備的基本特征:(1)復用:復用是構(gòu)件最基本的性質(zhì),構(gòu)件的設計必須滿足能在新的應用項目中使用;(2)封裝:封裝對外界隱藏構(gòu)件的設計和實現(xiàn)細節(jié),僅通過接口與外界交互,可以保證構(gòu)件功能復用的完整性和構(gòu)件開發(fā)及交付的獨立性;(3)組裝:構(gòu)件可以通過組裝形成新的構(gòu)件或系統(tǒng),組裝是構(gòu)件復用的手段;(4)粒度:構(gòu)件是有大小的,與領(lǐng)域相關(guān)的構(gòu)件粒度大;(5)層次:構(gòu)件可以按層次進行劃分,企業(yè)級應用系統(tǒng)的復雜邏輯可以通過分層來解決。
1.4 可復用構(gòu)件開發(fā)遵循的基本原則
(1)“開-閉”原則:一個軟件實體應該對擴展開放,對修改關(guān)閉。所謂“開”,就是要求構(gòu)件能適應不同的應用環(huán)境;所謂“閉”,就是要求構(gòu)件是一個獨立的整體。這是可復用構(gòu)件開發(fā)最基本的原則,也是復用要求的直接體現(xiàn)。實現(xiàn)“開-閉”原則的基本策略是對變化性進行封裝,即找到構(gòu)件的可變因素,并將其封裝起來。
(2)依賴倒置原則:要針對接口編程,不要針對實現(xiàn)編程。它是指導開發(fā)可復用框架的基本原則,使得框架無需依賴具體構(gòu)件,具體構(gòu)件的開發(fā)需遵循框架設定的約束。實現(xiàn)依賴倒置原則的基本策略是在框架中為具體構(gòu)件設立抽象表示。
(3)接口隔離原則:是一個指導可復用構(gòu)件實現(xiàn)接口設計的原則,它使得構(gòu)件中每一個實體都擁有盡可能簡單的接口。實現(xiàn)接口隔離原則的基本策略是對構(gòu)件中的每個角色進行劃分,然后針對每一類使用者提供一套有針對性的接口。
(4)迪米特法則:每個軟件實體應當盡可能少地與其他實體發(fā)生相互作用[7]。實現(xiàn)迪米特法則的基本策略是控制軟件實體間由于信息傳遞而產(chǎn)生的耦合關(guān)系。
2 構(gòu)件開發(fā)模型
構(gòu)件模型是對構(gòu)件本質(zhì)特性的抽象描述[8]。本文提出一種構(gòu)件分層設計模型,如圖2 所示,該模型解決了構(gòu)件內(nèi)部結(jié)構(gòu)和組織問題,保證良好的功能職責劃分,保證構(gòu)件以規(guī)范化的方式提供對外服務接口和擴展接口,保證構(gòu)件具有良好的擴展性以及隨需應變的能力。該模型遵循本文中上面所提出的可復用構(gòu)件開發(fā)的基本原則,在設計中使用模塊,增進了內(nèi)聚性,降低了耦合度,低耦合降低了復雜性并增強了可維護性。對于復雜系統(tǒng),需求變化不穩(wěn)定,為使設計具有更好的可擴展性、靈活性與邏輯性,通過分層分而治之,主要分為表現(xiàn)層、業(yè)務邏輯層、持久化層,使其關(guān)注點分離。API(Application Programming Interface)接口是外部調(diào)用者;MAI(Management Application Interface)接口是內(nèi)部調(diào)用者;SPI(Service Provider Interface)接口是構(gòu)件本身的可擴展點,通過分層帶來更好的可伸縮性與可維護性。其中,表現(xiàn)層又叫展現(xiàn)層,主要功能是向人展示,最終實現(xiàn)人機交互。一般表現(xiàn)層與具體的業(yè)務需求有關(guān),需具體問題具體分析,在此就不再詳細介紹,下面主要介紹業(yè)務邏輯層設計模型和持久化層設計模型。
2.1 業(yè)務邏輯層設計模型
業(yè)務邏輯層設計模型如圖3所示。業(yè)務邏輯層根據(jù)職責具體分為服務層和領(lǐng)域?qū)樱?1)Service服務層定義了應用的邊界和從客戶角度所能看到的可用操作集。①它包括實體home即Entity Home和流程管理,由Normal Service實現(xiàn);②它是無狀態(tài)類,不包含任何業(yè)務邏輯,定義了一個公共的應用操作集合,可供各種使用者使用。(2)領(lǐng)域?qū)拥闹饕氊熓菍崿F(xiàn)業(yè)務邏輯,它包含API層和MAI層。①API層遵循最小化設計原則,在完成功能的前提下盡可能簡單,提供相對穩(wěn)定的接口,減少改動帶來的影響,易于使用;EntityAPIWrapper:實現(xiàn)API接口,避免對外暴露MAI接口,實現(xiàn)延遲加載等;②MAI層是內(nèi)部調(diào)用者,EntityMAI:定義可以對外提供的服務和職責;EntityMAIBase:提供基本共性實現(xiàn);EntityMAIImp:為內(nèi)部調(diào)用者提供服務,調(diào)用SPI層實現(xiàn)持久化。
2.2 持久化層設計模型
持久化層設計模型,如圖4所示,持久化層主要功能是實現(xiàn)數(shù)據(jù)的存儲、讓客戶了解功能的擴展點和為業(yè)務邏輯層提供服務。(1)SPI接口:定義抽象共性的方法;(2)Base實現(xiàn)類:定義共性的方法,對對象進行延遲加載;(3)JDBC實現(xiàn)類:負責與數(shù)據(jù)庫交互;降低對底端的依賴,增強變化性;(4)Wrapper實現(xiàn)類:負責創(chuàng)建對象時對返回的對象進行包裝,對日志、緩存和關(guān)系邏輯進行處理,在批處理過程中可以結(jié)合cache及Pool進行預加載。
3 基于構(gòu)件的軟件復用開發(fā)實例
結(jié)合本人在中創(chuàng)軟件公司實習中參與的項目實踐,本文應用該模型開發(fā)了面向金融領(lǐng)域的客戶管理構(gòu)件,保證構(gòu)件以規(guī)范化的方式提供對外服務接口和擴展接口,保證構(gòu)件具有良好的擴展性以及隨需應變的能力,并將該構(gòu)件復用于具體的金融項目,降低了開發(fā)難度,加快了開發(fā)速度,能夠較好地解決復用這一問題,能夠從構(gòu)件開發(fā)模型結(jié)構(gòu)的高度指導構(gòu)件的開發(fā)和靈活復用。
3.1 客戶管理構(gòu)件
客戶管理構(gòu)件是用于對客戶信息與客戶間相互關(guān)系進行管理維護的構(gòu)件,提供統(tǒng)一的客戶管理功能,提供可視化的客戶信息定義,滿足個性化需求。不同行業(yè)、不同的企業(yè)對客戶信息的管理內(nèi)容千變?nèi)f化,客戶管理構(gòu)件是面向領(lǐng)域的構(gòu)件,本文中所研究的是面向金融領(lǐng)域。客戶管理構(gòu)件總體上分為以下幾個模塊:
(1)客戶類型管理:客戶類型可配置,通過類型管理具有相同屬性的客戶集合;
(2)客戶組類型和組管理:通過組來管理具有不同特征的客戶集合;
(3)客戶信息維護:通過客戶類型,對客戶信息的增加、刪除、修改、查詢和版本控制等進行統(tǒng)一維護;
(4)客戶關(guān)系維護:管理不同類型客戶之間的相互關(guān)系。
3.2 金融租賃客戶管理系統(tǒng)
利用客戶管理構(gòu)件,針對金融租賃客戶管理系統(tǒng)項目具體需求,支持該項目客戶管理系統(tǒng)的開發(fā)。金融租賃客戶管理系統(tǒng)包含的主要子領(lǐng)域及其相互之間的依賴關(guān)系如圖5所示,各個子領(lǐng)域的簡要說明如下:
(1)客戶信息查詢與維護:該領(lǐng)域封裝了通過客戶類型對客戶信息表中記錄的查詢、增加、刪除、修改及維護功能;
(2)個人客戶管理:主要負責對金融租賃領(lǐng)域中涉及的自然人的信息進行管理;
(3)對公客戶管理:主要負責對金融租賃領(lǐng)域中涉及的組織機構(gòu)進行管理;
(4)集團客戶管理:主要負責對兩個或兩個以上客戶成員團體的信息進行管理;
(5)同業(yè)客戶管理:主要負責對金融機構(gòu)客戶的信息進行管理;
(6)部門及管護員調(diào)整:主要負責對客戶部門、經(jīng)理發(fā)生變動的信息進行管理;
(7)客戶信息數(shù)據(jù)庫:主要負責對整個客戶管理信息領(lǐng)域中涉及的各種客戶信息以及其他相關(guān)信息進行存儲并提供訪問接口。
在金融租賃客戶管理系統(tǒng)中運用了大量的構(gòu)件,主要有:用戶權(quán)限管理構(gòu)件、參數(shù)管理構(gòu)件、元數(shù)據(jù)管理構(gòu)件、財務報表管理構(gòu)件、評級管理構(gòu)件、內(nèi)容管理構(gòu)件等。構(gòu)件代碼比例約占62.3%,新增構(gòu)件約占28.6%,構(gòu)件化比例相當大,使原本半年的開發(fā)時間縮短為兩個月,減少了開發(fā)成本,提高了軟件開發(fā)效率和產(chǎn)品的質(zhì)量,減少了系統(tǒng)的維護代價。為了更好地說明此構(gòu)件開發(fā)模型的優(yōu)勢,將傳統(tǒng)的軟件開發(fā)方法與基于復用的構(gòu)件開發(fā)模型方法進行比較,統(tǒng)計結(jié)果如表1所示,實踐表明,基于本文提出的模型開發(fā)的構(gòu)件降低了開發(fā)難度,加快了開發(fā)速度,較好地解決了復用的問題。
4 總結(jié)與展望
本文提出一種基于復用的構(gòu)件開發(fā)模型,該模型規(guī)范和約束了構(gòu)件的內(nèi)部結(jié)構(gòu),保證構(gòu)件以規(guī)范化的方式提供對外服務接口和擴展接口;保證構(gòu)件具有良好的擴展性以及隨需應變的能力;將該開發(fā)模型應用于客戶管理構(gòu)件開發(fā),并基于該構(gòu)件復用于金融租賃客戶管理系統(tǒng)。通過實踐對比表明,使用該構(gòu)件開發(fā)模型降低了開發(fā)難度,加快了開發(fā)速度,能夠較好地解決復用這一問題。由于構(gòu)件開發(fā)涉及領(lǐng)域繁多,該構(gòu)件開發(fā)模型還有很多不足之處,還有待于在實踐中繼續(xù)完善。
參考文獻
[1] 楊芙清,梅宏,李克勤.軟件復用與軟件構(gòu)件技術(shù)[J]. 電子學報,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]. 北京: 機械工業(yè)出版社, 2005.
[6] 楊芙清,梅 宏. 面向復用的需求建模[M].北京:清華大學出版社, 2008.
[7] 閻宏. Java與模式[M].北京:電子工業(yè)出版社,2002.
[8] EVANS E. Domain-driven design: tackling complexity in the Heart of Software[M]. Addison Wesley, 2006.