|
摘 要:針對(duì)行業(yè)軟件開發(fā)過程中普遍存在的研發(fā)水平低下和周期較長(zhǎng)的問題,提出一個(gè)基于 Java 企業(yè)版(JavaEE)的快速開發(fā)行業(yè)軟件通 用框架 RADF。RADF 實(shí)現(xiàn)了分層次軟件構(gòu)架規(guī)范,并提供一般行業(yè)應(yīng)用軟件期望的默認(rèn)行為的類集合。具體的行業(yè)應(yīng)用軟件可通過擴(kuò)展 RADF 的相關(guān)子類以支持專有行為。開發(fā)實(shí)踐證實(shí),基于 RADF 開發(fā)一個(gè)中等規(guī)模的行業(yè)軟件可至少減少 30%的代碼量。 系結(jié)構(gòu)研究和應(yīng)用軟件開發(fā)三者發(fā)展結(jié)合的產(chǎn)物,是整個(gè)或1 概述 部分系統(tǒng)的可重用設(shè)計(jì),是可被應(yīng)用開發(fā)者定制的應(yīng)用骨架。 行業(yè)軟件(如社會(huì)保險(xiǎn)業(yè)務(wù)系統(tǒng)、證券客戶關(guān)系系統(tǒng)、智[1]框架表現(xiàn)為一組抽象構(gòu)件及構(gòu)件實(shí)例間交互的方。法它規(guī) 能交通監(jiān)控平臺(tái))是指面向特定領(lǐng)域、支持業(yè)務(wù)信息化的管理 定了應(yīng)用軟件的體系結(jié)構(gòu),闡明了整個(gè)設(shè)計(jì)、協(xié)作構(gòu)件之間 軟件。行業(yè)軟件的應(yīng)用開發(fā)是我國(guó)信息化建設(shè)的重要領(lǐng)域。 的依賴關(guān)系、責(zé)任分配和控制流程,同時(shí)為構(gòu)件復(fù)用提供了 抽取行業(yè)軟件研發(fā)所必需的共性支撐技術(shù)形成支持快速開發(fā) 上下文(context)關(guān)系。在很多情況下,框架通常以構(gòu)件庫(kù)的 的通用基礎(chǔ)框架,對(duì)于提升行業(yè)軟件開發(fā)水平和提高開發(fā)效形式出現(xiàn),但構(gòu)件庫(kù)只是框架的一個(gè)重要部分,框架的關(guān)鍵 率具有重大的現(xiàn)實(shí)意義。 還在于框架內(nèi)對(duì)象間的交互模式和控制流模式??蚣芸勺鳛?由于 J2EE/JavaEE(J2EE為 Java 2 企業(yè)版;JavaEE為 Java 基于 J2EE/JavaEE 技術(shù)的行業(yè)軟件的基礎(chǔ)部分,運(yùn) 在行 企業(yè)版,是J 2EE 1.4 版本之后的升級(jí)版本)技術(shù)在可擴(kuò)展性、 J2EE/JavaEE 平臺(tái)之 上 。 通用框 架 、 行業(yè)應(yīng) 用軟 件與 標(biāo)準(zhǔn)化和互操作性等方面的優(yōu)勢(shì),當(dāng)前一般的大中型行業(yè)應(yīng) J2EE/JavaEE平臺(tái)三者的關(guān)系如 圖1 所示。 用系統(tǒng)大多基于 J2EE/JavaEE 平臺(tái)開發(fā)。這些平臺(tái)主要包括BEA 公司的W ebLogic、IBM 公司的W ebSphere, JBoss 等。 但是 J2EE/JavaEE 體系龐大,技術(shù)紛繁復(fù)雜,入門困難,學(xué) 行業(yè)應(yīng)用軟件 習(xí)曲線陡峭。直接基于 J2EE/JavaEE平臺(tái)進(jìn)行應(yīng)用軟件開發(fā), 如果沒有高水平的結(jié)構(gòu)規(guī)劃,不但影響開發(fā)效率,而且極易造成低水平的重復(fù)。 通用框架(RADF) 雖然不同行業(yè)軟件的業(yè)務(wù)需求千差萬(wàn)別,但其應(yīng)用程序的結(jié)構(gòu)是基本一致的,都有信息輸入、頁(yè)面流轉(zhuǎn)、業(yè)務(wù)邏輯 JavaEE/J2EE平臺(tái) (IBM WebSphere, BEA WebLogic, Jboss , ?) 處理、數(shù)據(jù)庫(kù)訪問等控制環(huán)節(jié)。另一方面,在對(duì)業(yè)務(wù)經(jīng)辦和管理決策起支撐作用的應(yīng)用過程中,它們也有很多共性需求。 例如:用戶需要通過合適的身份認(rèn)證,需要制作反映業(yè)務(wù)狀 圖 1 通用框架、應(yīng)用軟件與J2EE/JavaE E平臺(tái)的關(guān)系 況的各類報(bào)表,需要實(shí)現(xiàn)多角度的動(dòng)態(tài)即時(shí)數(shù)據(jù)分析。如果 本文 提出的支持快 速開發(fā)行業(yè)應(yīng) 用軟件的通用 框架 能以高質(zhì)量構(gòu)件的形式提供對(duì)這些行業(yè)軟件結(jié)構(gòu)和功能方面 RADF(Rapid Application Development Framework)不但實(shí)現(xiàn)的共性需求的支持,形成一個(gè)基于分布式企業(yè)級(jí)計(jì)算平臺(tái) (J2EE/JavaEE平臺(tái) )之上的通用框架,無(wú)疑會(huì)大大加快具體行 基金項(xiàng)目:浙江省重大科技專項(xiàng)基金資助項(xiàng)目“支持快速開發(fā)的行業(yè)軟件的開發(fā)進(jìn)度,并且提高相應(yīng)的設(shè)計(jì)水平。 業(yè)軟件通用框架的研制及應(yīng)用”(2008C11099-1) 作者簡(jiǎn)介:俞東進(jìn)框架(或稱為應(yīng)用框架、軟件框)架是構(gòu)件技術(shù)、軟件體 (1969,),男,教授級(jí)高級(jí)工程師,主研方向:軟 件架構(gòu),JavaEE,企業(yè)信息化和決策支持; 了基于模型-視圖-控制(Model-View-Controller, M VC)的分層 (1)請(qǐng)求處理層Action 次規(guī)范軟件構(gòu)架,而且提供了包括界面呈現(xiàn)、跳轉(zhuǎn)控制、對(duì) 請(qǐng)求處理層接收前端傳入的顯示層數(shù)據(jù)對(duì)象,并將其轉(zhuǎn) 象持久化、異常處理、國(guó)際化、單元測(cè)試、身份認(rèn)證、權(quán)化限為 業(yè)務(wù)層數(shù)據(jù)對(duì)象,進(jìn)行統(tǒng)一日志處理、異常處理、 字符控制、日志處理、報(bào)表制作、在線數(shù)據(jù)分析等在內(nèi)的行業(yè)軟 集轉(zhuǎn)換等。然后,通過Se rviceFactor反射調(diào)用業(yè)務(wù)服務(wù)接口 。 件通用基礎(chǔ)性功能組件。RADF 實(shí)現(xiàn)了普通行業(yè)應(yīng)用軟件期 最后,取回調(diào)用服務(wù)后的返回信息,而服務(wù)運(yùn)行的狀態(tài)信息 (成功、失敗等)則返回給框架本身,如圖3 所 示。 望的默認(rèn)行為的類集合,具體的應(yīng)用軟件則可通過擴(kuò)展子類 (該子類屬于框架的默認(rèn)行)為來(lái)支持相關(guān)的專有行為,從 而 在確保軟件質(zhì)量的前提下縮短開發(fā)進(jìn)度。 2 國(guó)內(nèi)外研究現(xiàn)狀和發(fā)展趨勢(shì) 從過去 20 年的軟件技術(shù)發(fā)展可以清晰地看出軟件重用技術(shù)的發(fā)展脈絡(luò)。從早期C 語(yǔ)言類庫(kù)函數(shù)的重用 ,到面向?qū)?象編程的迅速壯大,到可復(fù)用構(gòu)件的發(fā)展和成熟,再到最 近 幾年應(yīng)用框架的重用。軟件重用的粒度越來(lái)越大,軟件復(fù)用 [2] 的效率也越來(lái)越高。 框架的概念起源于Smallta lk 環(huán)境,其中最著名的框架是 Smalltalk 80 的用戶界面框架M VC。雖然框架研究最初起源 于用戶界面領(lǐng)域,但它已被成功地應(yīng)用到其他領(lǐng)域中,如 J2EE/JavaEE應(yīng)用的開 發(fā)。 J2EE/ JavaEE應(yīng)用的開發(fā)一般比較復(fù) 雜。 J2在EE/JavaEE 應(yīng)用開發(fā)的最初階段,經(jīng)常需要花費(fèi)很多時(shí)間設(shè)計(jì)開發(fā)專用 框架,如 MVC 框架、持久化框架、IOC 框架,但很難取得 圖 3 請(qǐng)求處理層控制流程 相應(yīng)的效果,甚至導(dǎo)致了更加復(fù)雜的編程模型和更低的性 (2)業(yè)務(wù)接口層Fa ?ade 能。 直到最近幾年才出現(xiàn)了一些得到廣泛認(rèn)可的開放源 業(yè)務(wù)接口層提供異常處理類和服務(wù)接口等,所有的前端 碼的框 架,如 IOC 框架 Spring、OR Mapping框 架 iBatis, 請(qǐng)求(請(qǐng)求處理層中的 Action 請(qǐng)求)只能通過 Fa?ade 獲得業(yè)務(wù) 它們的出 現(xiàn)極大地提高了應(yīng)用程序開發(fā)的效率。但是, 處理,而不能直接調(diào)用后臺(tái)的業(yè)務(wù)處理模塊。 它們都只提供 (3)業(yè)務(wù)實(shí)現(xiàn)層BSI mp了應(yīng)用程序在某一層次的框架,而不是一個(gè)完整的企業(yè)級(jí)應(yīng) 用級(jí)別的框架。 當(dāng)前,學(xué)術(shù)界對(duì)應(yīng)用軟件框架的理論研業(yè)務(wù)實(shí)現(xiàn)層中的 BSImp 對(duì)象根據(jù)業(yè)務(wù)規(guī)則調(diào)用一個(gè)或多 究相對(duì)較少,基 個(gè)業(yè)務(wù)處理對(duì)象(Business Process Object, BPO)中的方法,完 本都套用了對(duì)支撐其運(yùn)行的框架平(J臺(tái)2EE/JavaEE 平 臺(tái))的 成一個(gè)完整的業(yè)務(wù)邏輯。事務(wù)的控制也在 BSImp 中進(jìn)行,對(duì) [3][4][5]研究成果,例如事務(wù)模型、反射體系、框架集成、于跨多個(gè)B SImp 的長(zhǎng)事務(wù)請(qǐng)求,可以根據(jù)業(yè)務(wù)分解成多個(gè)小 [6]MVC。 在軟件工程界,由于應(yīng)用軟件框架對(duì)于提高復(fù)雜的 BPO 方法進(jìn)行處理。 系統(tǒng)的開發(fā) 生產(chǎn)力有顯著意義,因此在應(yīng)用框架的開發(fā)方 (4)業(yè)務(wù)實(shí)現(xiàn)層BPO 面投入了較多 的人力和財(cái)力。 BPO 封裝了基本(原子)的業(yè)務(wù)操作。原子的業(yè)務(wù)操作是 3 RADF 結(jié)構(gòu)設(shè)計(jì) 指其不能再被拆解成 2 個(gè)或 2 個(gè)以上獨(dú)立的業(yè)務(wù)操作。BPO 本文的RA DF 框架基于J2EE /JavaEE平臺(tái),支持瀏覽器層是一個(gè)相對(duì)的邏輯層,B和SI mp 層沒有非常嚴(yán)格的層次區(qū) 和桌面應(yīng)用程序2 種前端模式??蚣茉O(shè)計(jì)的技術(shù)路線如下。 分。對(duì)于簡(jiǎn)單的業(yè)務(wù),可以把此層歸入 BSImp 層。 3.1 分層結(jié)構(gòu)設(shè)計(jì) 框架主要結(jié)BPO 處理按順序可分成3 個(gè)部分:構(gòu)如圖 2 所示。 1) 對(duì)傳入數(shù)據(jù)的合法性進(jìn)行驗(yàn)( 證也許需要從數(shù)據(jù)庫(kù)中獲取數(shù)據(jù)進(jìn)行比較)。 2)對(duì)數(shù)據(jù)進(jìn)行加工(增、刪、改、查等)。 3)對(duì)數(shù)據(jù)操作結(jié)果進(jìn)行分析和相關(guān)后續(xù)操作。(5)數(shù)據(jù)持久層 Java 數(shù)據(jù)持久層的入口和出口都是PO JO(Plain Old Object)。POJO 只完成明確傳入數(shù)據(jù)的操作,不涉及任何業(yè) 務(wù)邏輯。數(shù)據(jù)持久層的實(shí)現(xiàn)可以通過具體的數(shù)據(jù)訪問對(duì)象 (Data Access Object, DAO方法來(lái)執(zhí)行),也可以通 過Hibernate 實(shí)現(xiàn)。 3.2 數(shù)據(jù)交換設(shè)計(jì) RADF 通過 Fa?ade 接口將系統(tǒng)分成邏輯上的前臺(tái)、后臺(tái) 2 個(gè)部分。原則上,前后臺(tái)接口格式是固定的Actio,n 調(diào)用 Fa?ade 過程中傳遞的參數(shù)統(tǒng)一封裝R在e questMessage類中, Fa?ade 返回的參數(shù)統(tǒng)一封裝在Re sponseMessage類 中。 (1)RequestMessage表 示 Action 層調(diào)用 Fa?ade 的入口參圖 2 框架總體結(jié)構(gòu)個(gè)項(xiàng)目中最大。數(shù),主要內(nèi)容包括 2 個(gè)部分:頭信息 head,數(shù)據(jù)體信息 body。 其中,頭信息 head 是用于保存當(dāng)前操作者的資料信息,在登 4.2 快速模式 快速模式強(qiáng)調(diào)并行操作,減少可能重復(fù)的工作,加快開 錄時(shí)由框架寫入并保存在會(huì)話中;數(shù)據(jù)體信息 body 是前后臺(tái)發(fā)速度,但對(duì)項(xiàng)目主管的掌控能力以及項(xiàng)目組成員的獨(dú)立開 交互的核心,前后臺(tái)需要傳遞的每項(xiàng)數(shù)據(jù)(即業(yè)務(wù)實(shí)體對(duì)發(fā)能力要求較高。如果項(xiàng)目組中大部分人對(duì)框架比較熟悉, 象) 在 Action 中已經(jīng)被預(yù)先放置到一個(gè)散列映射(hashmap) 或者具有較多的開發(fā)經(jīng)驗(yàn),獨(dú)立工作能力較強(qiáng),可采用此方 中,在 BSImp 層中即可獲取該散列映射以及保存其中的業(yè)式進(jìn)行開發(fā)。務(wù)實(shí)體 對(duì)象。 在實(shí)踐快速模式的過程中,可將項(xiàng)目組成員分2 組成 (2)ResponseMessage表 示 Fa?ade 返回給請(qǐng)求處理層的出1 組人員對(duì)業(yè)務(wù)熟悉或設(shè)計(jì)、開發(fā)能力較強(qiáng),其余人員分在 口參數(shù)。其與入口參數(shù)幾乎一樣,也包含頭信hea息d 和數(shù) 第 2 組。 據(jù)體信息b ody。但是 ResponseMessage信息不需要開發(fā)人員 步驟 1 第 1 組根據(jù)頁(yè)面和設(shè)計(jì)文檔定義編寫請(qǐng)求處理層 解析,而由框架直接轉(zhuǎn)換成其他格式Resp。onseMessage的頭中的 Action 類,同時(shí)定義需要的fa ?ade 接口,第 2 組編寫實(shí) 信息 head 主要用于保存fa ?ade 接口的調(diào)用結(jié)果和出錯(cuò)信息,體類。因?yàn)樵O(shè)計(jì)的 Action 中需要用到實(shí)體類,所以必須保證 而由請(qǐng)求處理層解析返回信息中的 head 部分;數(shù)據(jù)體信息設(shè)計(jì)實(shí)體類的速度快于設(shè)Actio計(jì) n 類的速度,一般情況下第body 則是后臺(tái)返回的數(shù)據(jù)信息,和入口參數(shù)使用相似, 采用 2 組總會(huì)先完成。 散列映射的形式存放。 步驟 2 第 1 組定義需要的BSI mp 層框架(不具體編寫 4 應(yīng)用開發(fā)實(shí)踐 BSImp 類);第 2 組編寫數(shù)據(jù)庫(kù)訪問 的5 個(gè)基本操作并用 JUnit 沒有一個(gè)框架能完美地適應(yīng)所有業(yè)務(wù)應(yīng)用系統(tǒng),RADF進(jìn)行單元測(cè)試,然后編寫B(tài)P O 層框架。2 組花費(fèi)的時(shí)間可能 的目的僅僅是減小不同業(yè)務(wù)和系統(tǒng)結(jié)構(gòu)對(duì)某個(gè)具體行業(yè)應(yīng)用 相差很大,并不要求同步完成,一般都是第 2 組先完成。 軟件所造成的影響。在基于RAD F 進(jìn)行開發(fā)的實(shí)踐中,可根步驟 3 第 1 組人員改造前端界面,調(diào) 用Action 類完成相據(jù)項(xiàng)目組的具體人員組成、開發(fā)經(jīng)驗(yàn)、框架熟練度,選擇 2 種比較合適的開發(fā)模式:穩(wěn)重模式和快速模式。 關(guān)界面流轉(zhuǎn);第 2 組人員編寫B(tài) SImp 層,同時(shí)根據(jù)需要進(jìn)一 4.1 穩(wěn)重模式 穩(wěn)重模式的核心是優(yōu)先完成最底層、簡(jiǎn)單而步完善業(yè)務(wù)處理對(duì)象和數(shù)據(jù)訪問對(duì)象。 容易出錯(cuò)的 在快速模式下,2 組分別從兩邊開始向核心的業(yè)務(wù)實(shí)現(xiàn) 數(shù)據(jù)操作處理。一個(gè)穩(wěn)固的底層會(huì)大大減少后續(xù)測(cè)試時(shí)間。 層 BSImp 靠攏。這種分工可以使熟悉的人完成復(fù)雜度大的內(nèi) 如果項(xiàng)目組中大部分人對(duì)框架不熟悉,或者大部分都是工 作容,不熟悉的人完成工作量大而難度低的內(nèi)容。由于此分工 經(jīng)驗(yàn)很少的新人,可采用此方式進(jìn)行開發(fā)。 穩(wěn)重模式中方式靈活,因此可最大限度地靈活分配每個(gè)成員的工作。當(dāng)每個(gè)步驟相對(duì)比較容易控制,所完成的底層 然,任務(wù)完成的時(shí)間并不同步。工作完全可以做到相對(duì)扎實(shí)而不容易出現(xiàn)太大偏差,但需要5 結(jié)束語(yǔ)耗費(fèi)較長(zhǎng)的時(shí)間是其最大的問題。具體步驟如下: 行業(yè)應(yīng)用軟件發(fā)展至今已變得十分復(fù)雜,涉及的知識(shí)、內(nèi)容、問題眾多。如果行業(yè)應(yīng)用軟件的開發(fā)者能在某些方面 步驟 1 根據(jù)設(shè)計(jì)文檔建立數(shù)據(jù)庫(kù),編寫實(shí)體類。使用已有的成熟應(yīng)用框架,就可以集中精力完成系統(tǒng)的業(yè)務(wù) 步驟 2 針對(duì)每個(gè)實(shí)體類,實(shí)現(xiàn)數(shù)據(jù)持久層中針對(duì)數(shù)據(jù)庫(kù) 邏輯設(shè)計(jì),而不必在技巧性要求較高的復(fù)雜基礎(chǔ)組件上浪費(fèi) 訪問的 5 種固定方法:doCreate, doDelete, doUpdated, oFind, 時(shí)間和精力。RADF 就是這樣一個(gè)框架。已完成3的 個(gè)項(xiàng)目 getAllRecords。 的開發(fā)實(shí)踐證實(shí),基于RA DF 開發(fā)一個(gè)中等規(guī)模的行業(yè)軟件 步驟 3 使用 JUnit 進(jìn)行數(shù)據(jù)持久層測(cè)試,保證各數(shù)據(jù)操 可至少減少 30%的代碼量。 作準(zhǔn)確無(wú)誤。 步驟 4 針對(duì)每個(gè)實(shí)體類編寫B(tài)P O,連接到指定的數(shù)據(jù)持 久層中。 參考文獻(xiàn) 步驟 5 根據(jù)設(shè)計(jì)文檔(如果是 Web 應(yīng)用,主要依據(jù)靜態(tài) J2EE 平臺(tái)的擴(kuò)展事務(wù)模型支持框 步驟 6 在 BSImp 層中編寫f a?ade 的實(shí)現(xiàn)類,同時(shí)根據(jù) 架[J]. 計(jì)算機(jī)研究與發(fā)展, 2006, 43(7): 1273-1279. 需要進(jìn)一步完善業(yè)務(wù)處理對(duì)象和數(shù)據(jù)訪問對(duì)象。 [4] 胡海洋, 馬曉星, 陶先平, 等. 反射中間件的研究與進(jìn)展[J]. 計(jì) 步驟 7 使用 JUnit 進(jìn)行 BSImp 層的測(cè)試。 算機(jī)學(xué)報(bào), 2005, 28(9): 1407-1420. 步驟 8 實(shí)現(xiàn)請(qǐng)求處理層中的各個(gè)Actio n 類。 [5] 林 泊, 周明輝, 劉天成, 等. 一個(gè) J2EE應(yīng)用 服務(wù)器的 Web 容器 集成框架[J]. 軟件學(xué)報(bào), 2006, 17(5): 1195-1203. 步驟 9 改造前端界面,調(diào)用相應(yīng) A的ction 方法以完成業(yè)[6] 劉 寧, 陸榮國(guó), 繆萬(wàn)勝. MVC 體系架構(gòu)從模式到框架的持續(xù)抽 務(wù)功能。象進(jìn)化[J]. 計(jì)算機(jī)工程, 2008, 34(4): 107-110. 其中,前4 個(gè)步驟是基礎(chǔ)階段,做好這4 個(gè)步驟可 大大 編輯 張 帆減少以后出錯(cuò)的幾率。步驟6 和步 驟 8 是后臺(tái)開發(fā)中最復(fù)雜也是最容易出錯(cuò)的部分。步驟 9 難度不大,但其繁瑣度在整
信息發(fā)布:廣州名易軟件有限公司 http://www.jetlc.com
|