專利名稱:一種大粒度構件的平臺相關模型及其代碼自動生成方法
技術領域:
本發明涉及模型驅動的企業應用軟件開發方法,尤其涉及一種基于大粒度 構件平臺相關模型的軟件開發方法,屬于信息技術領域。
技術背景面對全球范圍內激烈的市場競爭,企業總是持續完善其業務模式以提高其自 身的競爭力,企業管理軟件也必須能夠快速有效地適應不斷變化的業務需求。 然而當前的企業應用軟件存在研發成本高、實施成本高、實施周期長等問題, 嚴重阻礙了快速低成本地開發具有隨需應變能力的構件化軟件系統。模型驅動的軟件體系結構(Model Driven Architecture, MDA)與軟件開發被認為是開發此類軟件的一種有效途徑。MDA的目標是通過關注點的結構性分離來 實現復雜抽象系統不同層面的可實施性、互操作性和可重用性,將大型軟件系 統的開發分解為不同層面、分而治之,降低了系統整體設計和開發的難度,有 效地提高了復雜系統開發的成功性。MDA的基本思想是將系統的需求、功能規 約與其在特定技術平臺上的實現規約相分離,分別建立描述業務需求的計算無 關模型、描述軟件系統設計方案的平臺無關模型和描述具體實現機制的平臺相 關模型(Platform Specific Model, PSM),通過各層次模型要素的映射和轉換實 現逐層精化以及軟件系統自動生成,其中建模與模型轉換是MDA研究的兩個 核心問題。平臺相關模型PSM向上需要承接軟件設計內容并將其轉換為特定運 行平臺上的系統實現模型,向下它是模型轉換與自動生成代碼的基礎,其正確 性與優化程度決定了軟件的性能。模型驅動的軟件開發只有在代碼生成技術相對成熟的基礎上才能真正得以 實現。代碼生成器的主旨是利用計算機程序來編寫計算機程序,代碼生成是提 高軟件開發效率的有效手段之一。最初的用途是從高級語言編譯后生成匯編代 碼、機器指令,是語言轉換、編譯的不可缺少的工具。代碼生成研究一直關注 于代碼編譯,早期的基于Graham-Glanville方法的代碼生成器來替換C語言編 譯器,通過構造一種描述目標代碼的表格經過模式匹配輸出生成的代碼。之后代碼生成技術被引入基于高級語言的軟件開發領域,支持由可視化模型生成可 執行代碼。代碼生成類型可以歸為下列形式代碼重塑、內聯代碼展開、混合 代碼生成、局部類生成、層次化生成、全領域語言描述等。隨著模型驅動體系 結構技術的發展,代碼生成技術被廣泛應用于企業應用軟件的開發,支持從平 臺相關模型到可執行代碼的自動轉換。其中,通過模式化構件共性以提高其抽 象度和復用度,采用基于模式的代碼生成方法可以有效提高PSM模型到代碼的 轉換效率和正確性。在長期的軟件開發與應用過程中,人們抽象出多種軟件模
式,如軟件架構中的Client/Server模式、多層結構模式、MVC、管道過濾器等; 軟件開發劃分為基于概念模式規約的問題域,基于設計模式的設計域和實現概 念模式的解空間,采用設計模式指導概念模型到服務程序的生成;或建立基于 XML模式的柔性代碼生成器以生成分布式系統;或基于XSLT和Velocity模板 引擎實現業務模型到程序的轉換。
雖然,MDA思想改變了傳統的軟件開發進程,將軟件開發者從繁雜的編程 中解放出來,提升為以模型為中心,進行模型構造、轉換和精化,并通過代碼 自動生成來開發系統。但是尚缺乏一種系統性具體化的企業應用軟件建模方法, 來指導具體的軟件開發。并且已有的代碼生成方案和工具也存在擴展性和可集 成性差的不足。大多數代碼生成器生成的程序缺乏靈活性, 一旦生成代碼,用 戶難以改變其結構和風格。生成工具難于廣泛使用,導致用戶需要根據自己的 模型,設計開發特定的代碼生成工具。
發明內容
本發明的目的是提供一種大粒度構件的平臺相關模型及其代碼自動生成方 法,以解決目前缺乏一種系統性具體化的企業應用軟件建模方法和現有技術生
成的軟件缺乏靈活性和可變性的缺陷。它通過下述步驟實現 一、從已有的、 企業業務內容相同的多個軟件中,各抽象出若干個業務構件的典型軟件模式, 并獲取基于模式的非實例化構件文本;二、建模階段:從步驟一獲取的多個業務 構件的典型軟件模式中選定軟件模式,從而獲取業務構件的平臺相關模型;三、 開發階段:將業務構件的平臺相關模型自動生成為干業務構件程序;四、部署階 段:將干業務構件面向特定需求實例化為復用業務構件程序,從而產生最終的源 程序代碼;在最終的軟件系統中復用業務構件通過解析配置文件來動態適應企業的業務需求。
基于本方法生成的軟件系統具有適應企業業務需求不斷變化的能力,存在 三種途徑來適應企業的變化性需求途經之一,當業務變化圍繞權限或個性化 的相關需求時,通過動態配置的方式調整部署配置文件或個性化配置文件信息 以實現對業務構件的復用和軟件功能的調整。途經之二,當業務變化不能通過 動態配置方式予以滿足時,可部分修改構件程序實現對業務構件的適配和復用。 途徑之三,當業務變化較大,上述兩種途徑均不適用時,可通過重新建立大粒 度構件模型再生成為新業務構件的方式滿足新的軟件業務需求。由此解決了現 有技術生成的程序缺乏靈活性和可變性的缺陷。本發明將軟件的適應性分解到 多個階段予以實現,確保了高效快速的構件化開發和復用。
圖1為本發明的流程圖;圖2為本發明的業務構件軟件模式結構樹的示意 圖;圖3為本發明大粒度業務構件的平臺相關模型示意圖;圖4為本發明基于 模式的大粒度構件代碼生成器工作原理圖;圖5為本發明的一個實施例的實現 方案圖。
具體實施例方式
具體實施方式
一下面結合圖1具體說明本實施方式。本實施方式由下述 步驟實現 一、從已有的、企業業務內容相同的多個軟件中,各抽象出若干個 業務構件的典型軟件模式,并獲取基于模式的非實例化構件文本;二、建模階 段:從步驟 一獲取的多個業務構件的典型軟件模式中選定軟件模式,從而獲取業 務構件的平臺相關模型;三、開發階段:將業務構件的平臺相關模型自動生成為 干業務構件程序;四、部署階段:將干業務構件面向特定需求實例化為復用業務 構件程序,從而產生最終的源程序代碼;在最終的軟件系統中復用業務構件通 過解析配置文件來動態適應企業的業務需求。
下面詳細描述本實施方式中業務構件的產生、特征與分類方法
(1)通過對既有企業應用軟件的分析,歸納出一種以業務單據數據為屬性 集,圍繞單據的處理為操作集的模式化大粒度構件。模式化大粒度構件是相對 小粒度構件而言的,小粒度構件是指在應用軟件中可被明確識別的、不可再細 分的基本構成要素,如文本框、下拉列表框和單選按鈕等基本控件,它具有業
6務無關性。由若干小粒度構件和其間的關聯過程,按照用戶的需求組裝成一個
具有業務語義完整性的構件,稱其為業務構件(BusinessComponent)。
(2) 業務構件遵循典型的軟件模式,且具有唯一標識,穩定不變的屬性和 操作以及相對可變的屬性和操作。
(3) 業務構件分為干業務構件和復用業務構件兩類,干業務構件(Stem Business Component)是指所包含的屬性、操作的全集。復用業務構件(Reused Business Component)是將干業務構件中的可變特征變為固定特征后的構件。
所述業務構件是一種企業生產和經營過程中所處理的業務對象的軟構件實 現結果,包含對象的數據信息及相關的業務活動,是一種具有完整業務語義的 模式化大粒度構件。
業務構件依據其生命周期所處階段的不同關注點,劃分為屬性操作參數化的 千業務構件和依據需求被實例化后的復用業務構件。千業務構件是業務單據范 疇內的功能全集,復用業務構件是干業務構件派生出的功能子集。
業務構件模型在開發與部署過程中被分階段的多重生成為干業務構件和復 用業務構件。在開發階段將上述模型輸入代碼生成器,將與其匹配模式的非實 例化構件實例化為與模型描述一致的干業務構件可執行程序。在部署階段,系 統自動部署工具讀取部署需求,將干業務構件派生為若干個實例構件。
具體實施方式
二下面結合圖2具體說明本實施方式。本實施方式與實施方 式一的不同點是在步驟二中獲取的業務構件平臺相關模型,采用源碼級模式 描述語言定義J2EE平臺上業務構件的用戶模式和實現模式,其中模式描述語言 具有通用性,可適用于多種能夠高級編程語言所能實現的軟件模式。所述表達 方法包括
i 、軟件模式分類方法,將軟件模式劃分為面向使用者的用戶模式(User Pattem,UP)與面向軟件的實現模式(RealizationPattem,RP)兩類。用戶模式體現為 軟件與客戶端用戶的交互風格,實現模式是從軟件開發角度表現為一種實現方 案或運行機制。前者是后者的外在表現,后者是前者的技術支撐。
ii 、源代碼級的實現模式描述語言(Realization Pattern Description Language,RPDL),該語言定義為<11 01>::=<靜態代碼>|<動態代碼><動態 代碼到靜態代碼的轉換規則〉 <靜態代碼>::=< 目標程序語言所描述的內容>
〈動態代碼^F〈動態變量開始符x待實例化的動態變量x動態變量結束符〉 <待實例化的動態變量>::=<用程序語言A定義的變量> <動態代碼到靜態代碼的轉換規則>::=<轉換規則的開始符><基于A的轉換 規則內容><轉換規則結束符>
具體實施方式
三下面結合圖3具體說明本實施方式。本實施方式與實施
方式一的不同點是在步驟二中獲取的業務構件平臺相關模型用下述方法予以
表達該方法是一種基于J2EE平臺(本領域公知)的業務構件PSM模型表達 方法,所述方法包括以下步驟
i 、以Brown模型(本領域公知)作為業務構件的分層體系結構模型,確 定構件由若干種小粒度構件和連接子的組裝構成。各層次間的中等粒度構件由 外部連接子互連,每個層次上則有內部連接子組裝成中等粒度構件。
ii、基于上述確定的體系結構,選用一系列相關的軟件子模式和組裝子模式 作為業務構件實現的基礎。針對每個體系結構層面建立業務構件的實現模型。 依次建立表示層構件規約、應用控制層構件規約、業務邏輯層構件規約、關系 對象層構件規約和數據源層規約,以及這些層次之間的映射與關聯關系,完成 一個完整的業務構件模型描述。
具體實施方式
四下面結合圖4具體說明本實施方式。本實施方式與實施 方式一的不同點是步驟三和步驟四采用了一種基于模式的分階段代碼生成方 法來實現,具體的步驟三為
將業務構件的共性抽象為模式,基于模式定義非實例化的構件(模板),而 將那些面向'業務語義的個性內容描述為業務構件模型。基于模式的非實例化構 件與模型之間存在型-值關系,前者提供了基于語法的構件型描述,后者提供了 面向業務語義的構件值描述。在開發階段,通過代碼生成器將這兩部分內容融 合起來,可轉換得到一個具體的業務構件。
具體的步驟四為部署階段經過兩個主要步驟第一步,配置權限相關的干 業務構件成為可執行的復用業務構件。業務構件配置文件對干業務構件的復用 實現機制可采用動態或固化兩種方式。動態獲取配置信息是指在業務構件每次運行過程中讀取配置文件內容,解析且依據其內容自動重組構件內部業務邏輯 以實現復用。固化配置信息是指將配置信息寫入干業務構件的副本,給每個用 戶或角色生成專用的復用業務構件。第二步,將復用業務構件安裝部署到實際 系統運行環境中。基于業務構件的企業應用軟件中工作流引擎在可執行工作流 模型的控制下動態組裝復用業務構件來為不同用戶提供不同的服務。
具體實施方式
五下面結合圖5具體說明本實施方式。對本發明的技術方 案進行詳細的說明。
本發明的核心思想就是將軟件的可變性分解到軟件開發的各個階段,依不同 關注點在各個階段中分別予以軟件實現。在業務構件建模階段,針對業務功能 需求建立業務構件PSM模型,在開發階段,將源碼級非實例化構件模板實例化 為干業務構件,在部署階段,面向特定需求進一步將干業務構件派生為復用業 務構件。本方法直觀顯示地描述構件實現模型并轉換為代碼,從而加速軟件的 模式化規模化自動化開發。
參見圖l,首先,軟件開發人員在特定軟件模式基礎上建立表達業務功能的 業務構付f臺相關模型;將該模型輸入代碼生成器,轉換為千業務構件可執行 程序;然后,部署階段面向特定用戶需求再將干業務構件完全實例化為復用業 務構件。本發明以基于J2EE應用服務器上的業務構件開發過程為例,進行詳細 的說明。
參見圖2,在軟件外觀層次,用戶模式分別從用戶界面的結構和用戶操作的 流程兩個方面描述軟件的外特性。在軟件實現層次,實現模式依據分層體系結 構各層次和其間關系模式來描述構件的實現方式。將那些用于實現父結點的模 式被稱作子模式。業務構件模式是由一系列子模式(用戶子模式和實現子模式) 構成的集成體,父模式與子模式之間存在包含關系,兩個實現子模式之間需要 根據接口模式進行關聯。
一種源代碼級的實現模式描述語言RPDL (請發明人翻譯或解釋Realization Pattern Description Language,RPDL)從代碼實現角度指導業務構件的開發。例如 表示層中數據項的實現子模式描述,如表1所示。表1是關于JSP (請發明人翻 譯或解釋)界面以單元格形式顯示多個數據項的實現模式的代碼描述,這個片 段從(2)到(5)行是采用JAVA語言定義的轉換規則內容,其主要功能是對(7)行中
9由<#和#〉限定的動態代碼進行初始賦值。行(5)是此模式的核心功能,表示第(7) 行中代碼會依據數據源基數而多次迭代出現,每次出現時動態代碼將被實例化 為不同靜態代碼值。
(1) <&& 〃表示轉換規則的開始符號
(2) ... //定義待實例化的動態變量
(3) ... 〃獲取用戶指定數據集內容
(4) Iterator it - getDtateSet();
(5) while (it.hasNext()){.. 7/獲取各動態變量值_
(6) &&> 〃表示轉換規則的結束符號_
(7) <td><#lableName#>:<input name="<#controlID#>" type=" <#dataType#>"
value="<%=<#controlID#>%>"size="<#dataSize#>"></td> 〃基 于JSP的靜態與動態代碼混合體_
(8) <&&}&&>〃對應轉換規則中的while {符號_
業務構件由若干個小粒度構件通過內部或外部連接子連接而組裝形成。由 此,業務構件PSM模型由唯一標識、選定的構件模式、基于分層結構的核心模 型、用于支持可變性的配置模型以及外部接口模型共同組成,參見圖3。表示層 是業務構件與用戶直接交互的接口。 一個業務構件總是由若干個相互關聯的用 戶界面構成,為用戶提供提交請求與反饋處理結果等服務。各用戶界面之間存 在相互調用或一般性的鏈接關系。業務邏輯層是響應客戶端的用戶需求并進行 處理的核心邏輯程序。基于J2EE平臺上業務邏輯層的實現模式可表述為它由 若干包和類組成,其中常規操作的方法實現可由代碼生成器依據模式定義而自 動生成獲取,存儲在默認類文件中;那些根據用戶需求在擴展機制的約束下由 程序員手工開發的方法則存儲于擴展類文件中;核心控制類負責對其進行服務 編排與方法調用。數據層模型是在關系數據模式下描述業務構件的數據庫外模 式模型,描述了構件業務邏輯層處理的數據視圖與實際數據庫中的數據視圖之 間的映射關系。代碼生成過程的基本原理如下所述,輸入基于某種模式的業務構件模型X; 輸出業務構件代碼.其內容如下(l)解析業務構件模型的模式標識,在模式庫 中檢索并獲取相應模式的非實例化構件;(2)掃描非實例化構件內容,當找到一 個動態代碼時,檢索X中與其對應的數據進行代碼轉換;(3)重復執行(1)直到非 實例化構件中不存在動態代碼為止,轉到(4); (4)打印最終的構件代碼。代碼生 成器的工作原理參見圖4所示,采用基于模式的混合代碼生成方式。每次啟動 代碼生成器時,都要在其內部構造一個為指定業務構件"量身定做"的代碼書 寫器,代碼書寫器是采用JAVA中的標準輸出流"PrintWriter Out",通過Out 對象的Println (請發明人翻譯或解釋)方法實現在目標文件中打印字符。
業務構件生命周期內分階段,階段內又逐層映射、層內分組的配置方案,參 見圖5。經過開發、部署和應用三個必要階段。在每個階段中,軟件開發者所關 注的構件屬性各不相同。在開發階段,開發者將依據用戶的業務需求著重定義 構件的固定部分,如數據集和操作集的構成要素、相應的業務對象必須經歷的 生命周期狀態集、界面風格、操作模式等;而部署和應用階段,更關注于構件 中可變部分的實現,其中權限相關的屬性和用于滿足個性化需求的屬性可以在 部署和應用階段分別實例化。
在上述的業務構件建模、代碼生成與部署配置過程中,通過可視化建模工具 實現業務構件模型,通過代碼生成器將業務構件模型轉換為干業務構件代碼, 系統部署工具實現干業務構件派生為復用構件代碼。
最后,還需要注意的是,以上列舉的盡是本發明的一個具體實施例。顯然, 本發明不限于以上實施例,還存在許多變形。本領域普通技術人員能從本發明 公開的內容直接導出或聯想到得所有變形,均應認為是本發明的保護范圍。
該大粒度構件(也稱為業務構件)提供了一種在J2EE平臺上模式化的建立 業務構件實現模型的方式,基于模式的代碼生成方法提供了一種具有通用性和 擴展性的代碼生成機制,依據業務構件的生命周期各階段內的特征,將其劃分 為干業務構件和復用業務構件兩種類型的構件。基于本生成機制構造的代碼生 成器讀取用戶所建的完整業務構件PSM模型即可快速獲得初始實例化的干業 務構件程序,構件被部署過程中可通過動態配置方式將其進一步完全實例化為 面向特定用戶需求的復用業務構件。
權利要求
1、一種大粒度構件的平臺相關模型及其代碼自動生成方法,其特征在于它通過下述步驟實現一、從已有的、企業業務內容相同的多個軟件中,各抽象出若干個業務構件的典型軟件模式,并獲取基于模式的非實例化構件文本;二、建模階段從步驟一獲取的多個業務構件的典型軟件模式中選定軟件模式,從而獲取業務構件的平臺相關模型;三、開發階段將業務構件的平臺相關模型自動生成為干業務構件程序;四、部署階段將干業務構件面向特定需求實例化為復用業務構件程序,從而產生最終的源程序代碼;在最終的軟件系統中復用業務構件通過解析配置文件來動態適應企業的業務需求。
2、 根據權利要求1所述的一種大粒度構件的平臺相關模型及其代碼自動生 成方法,其特征在于所述業務構件是一種企業生產和經營過程中所處理的業務 對象的軟構件實現結果,包含對象的數據信息及相關的業務活動,是一種具有 完整業務語義的模式化大粒度構件。
3、 根據權利要求1所述的一種大粒度構件的平臺相關模型及其代碼自動生 成方法,其特征在于業務構件依據其生命周期所處階段的不同關注點,劃分為 屬性操作參數化的干業務構件和依據需求被實例化后的復用業務構件;干業務 構件是業務單據范疇內的功能全集,復用業務構件是干業務構件派生出的功能
4、 根據權利要求1所述的一種大粒度構件的平臺相關模型及其代碼自動生 成方法,其特征在于歩驟二中獲取的業務構件的平臺相關模型采用源碼級模式 描述語言定義J2EE平臺上業務構件的用戶模式和實現模式,其中模式描述語言 具有通用性,適用于多種能夠高級編程語言所能實現的軟件模式。
5、 根據權利要求4所述的一種大粒度構件的平臺相關模型及其代碼自動生 成方法,其特征在于,在已有業務構件體系結構與軟件模式基礎上,按照每個 體系結構層面的中等粒度構件進行平臺相關模型的建模,并定義連接子的屬性, 以組裝成完整的業務構件平臺相關模型。
6、 根據權利要求2所述的一種大粒度構件的平臺相關模型及其代碼自動生 成方法,其特征在于所述業務構件是基于業務構件的分層體系結構模型,將每 個層面上的若干小粒度構件采用內部連接子組裝起來形成表示層構件、業務邏輯層構件和關系對象層構件這些中等粒度構件,再借助外部連接子實現各體系 結構層次間的組裝,以形成完整的業務構件。
7、根據權利要求1所述的一種大粒度構件的平臺相關模型及其代碼自動生 成方法,其特征在于業務構件模型在開發與部署過程中被分階段的多重生成為 干業務構件和復用業務構件;在開發階段將上述模型輸入代碼生成器,將與其匹配模式的非實例化構件實例化為與模型描述一致干業務構件可執行程序;在 部署階段,系統自動部署工具讀取部署需求將干業務構件派生為若干個實例構
8、根據權利要求1所述的一種大粒度構件的平臺相關模型及其代碼自動生 成方法,其特征在于,所述的歩驟二中業務構件建模和步驟三、四中的代碼自 動生成通過可視化工具完成,所述可視化工具包括業務構件平臺相關模型建模 工具、代碼生成器和系統自動部署器,從而支持實現從模型到代碼的自動生成。
全文摘要
一種大粒度構件的平臺相關模型及其代碼自動生成方法,本發明涉及模型驅動的企業應用軟件開發方法。它解決目前缺乏一種系統性具體化的大粒度業務構件的建模方法和現有技術生成的軟件缺乏靈活性和可變性的缺陷。它通過下述步驟實現從已有的、企業業務內容相同的多個軟件中,各抽象出多個業務構件的典型軟件模式,并獲取基于模式的非實例化構件文本;從獲取的業務構件的典型軟件模式中選定軟件模式,基于特定軟件模式建立業務構件的平臺相關模型;將業務構件的平臺相關模型自動生成為干業務構件程序;將干業務構件面向特定需求實例化為復用業務構件程序,產生最終的源程序代碼;在最終的軟件系統中業務構件通過解析配置文件來動態適應企業的業務需求。
文檔編號G06F9/44GK101533349SQ200910071779
公開日2009年9月16日 申請日期2009年4月15日 優先權日2009年4月15日
發明者馮錦丹, 徐曉飛, 戰德臣, 聶蘭順 申請人:哈爾濱工業大學