構件組裝-特定領域建模與代碼生成

第三章 特定領域建模與代碼生成

本章首先歸納總結了創建特定領域元模型及其實現的方法與原則,介紹了使用GMF通過特定領域元模型快速定製生成特定領域建模工具的過程,並提出基於SA與SF創建覆蓋不同業務類型的樣例代碼的方法與原則,然後總結歸納了特定領域建模與代碼生成的整體過程,最後提出根據特定領域元模型將樣例代碼製作成代碼模板的方法與原則,並介紹了通用代碼生成引擎的組成部分以及代碼生成的過程。本章提出的特定領域建模與代碼生成的方法,可生成100%的程序代碼,是提高軟件開發效率與產品質量的有效途徑。

3.1創建特定領域元模型

元模型就是用來描述模型的模型,如使用UML類圖描述系統的結果就是模型,對類圖中各個元素(如類、接口、關聯等)的定義就是元模型。通過創建特定領元模型就可以由GMF快速配置生成特定領域建模工具。

3.1.1創建特定領域元模型的原則

通常由領域專家提取特定領域關鍵概念,創建特定領域元模型。同時,由於特定領域建模的另一個目標是生成100%的代碼,所以創建特定領域元模型也要考慮技術實現,即創建特定領域元模型的另一個來源是與技術實現的完整映射。

SA通常存在兩個特殊層次,用戶界面層(UI)與數據訪問層,這兩個層次是軟件系統的特有概念。本文將用戶界面層與數據訪問層作爲特定領域建模的共性層次,即爲特定領域模型建立兩個通用模型,用戶界面模型與數據訪問模型。

本文提出的創建特定領域元模型應遵循的原則,如下:

(1)通過特定領域分析提取特定領域關鍵概念建立特定領域核心元模型,並建立核心元模型之間的關聯關係。

(2)建立特定領域核心元模型的多角度視圖的元模型,如靜態結構、動態行爲、物理部署等視圖的元模型。

(3)提取用戶界面關鍵概念建立用戶界面元模型,如樣式、佈局、界面構件、交互數據等。

(4)提取數據訪問關鍵概念建立數據訪問元模型,如對象關係映射、JDBC、數據庫表結構、XML等。

(5)提取技術實現的關鍵概念建立輔助配置管理元模型,爲代碼生成提供配置管理輔助工具。

(6)對同一領域關鍵概念使用統一名稱進行標識。

上述6條原則從特定領域與技術實現兩個方面保證了所建立的特定領域元模型的完整性。

3.1.2使用XML模式描述特定領域元模型

DSM並沒有提供具體的技術實現,本文使用EMF創建特定領域元模型。EMF支持3種類型輸入,本文使用XML模式描述特定領域元模型,並作爲EMF的輸入,生成特定領域元模型Ecore。

使用XML模式描述特定領域元模型的方法,如下:

(1)將關鍵概念定義爲XML模式的Element。

(2)將關鍵概念的性質或屬性定義爲Attribute。

(3)爲Element或Attribute定義簡單或複雜類型。

(4)將關鍵概念之間的關聯關係定義爲Element,並嵌套添加子Element,分別指向關聯端的Element。

(5)將成對或成組出現關鍵概念定義爲Group。

使用XML模式作爲EMF輸入的優勢在於可通過XML模式對特定領域模型進行語法與一致性等模型驗證工作。針對特定領域模型多角度視圖,爲防止不同視圖存在相互衝突,必須進行一致性檢查驗證18。本文對系統功能、結構、行爲等模型描述進行一致性檢查,檢查措施有XML模式約束、錯誤定位提示、自動檢測修正等。一致性檢查驗證的基礎是特定領域元模型創建原則的第6條。

3.2特定領域建模

DSM從大幅度提高軟件生產力的角度提出特定領域建模,它提取特定領域關鍵概念建立特定領域建模工具,進行特定領域建模,結合特定領域代碼生成器直接生成最終產品。它強調特定領域建模,模型可以只適用於本領域,甚至是本產品或項目。

3.2.1使用特定領域元模型配置生成特定領域建模工具

目前,通常使用GMF實現創建特定領域建模工具。GMF提供圖形化定製環境,開發人員可在圖形環境中快速輕鬆定製生成自己的特定領域建模工具。

圖3-1  配置生成特定領域建模工具

如圖所示,本文使用GMF創建特定領域建模工具的具體過程如下:

(1)輸入XML模式,通過EMF生成元模型Ecore。

(2)建立圖形定義模型,輸入Ecore,定製圖形定義內容,生成.gmfgraph文件。

(3)建立工具定義模型,輸入圖形定義模型,定製工具定義內容,生成.gmftools文件。

(4)建立映射定義模型,輸入Ecore、圖形定義模型、工具定義模型,定製Ecore與圖形工具之間的映射,生成.gmfmap文件。

(5)通過映射定義模型,自動生成完整的特定領域建模工具。

由GMF建立的特定領域建模工具具有圖形化可拖拽的操作界面,可以非常方便的進行特定領域建模。

3.2.2以SA與SF爲基礎建立樣例代碼

特定領域元模型的創建必須考慮技術實現,但技術實現並不單純服務於特定領域元模型,它同時還提供代碼模板製作的基礎,樣例代碼。

SA是系統的高層規劃,提供系統劃分與設計的方法,定義系統靜態結構與動態交互等關係,在高層爲系統搭建提供理論指導。目前常用的有MVC(Model、View、Controller)三層架構。SF是系統架構指導下對系統的共性部分進行抽象提煉形成的實現基礎,在此之上開發完整的業務系統。目前常用的有SSH(Struts,Spring,Hibernate)框架。SA與SF是軟件發展成熟的表現,它以複用爲目標,使軟件開發不必從零開始。

樣例代碼是面向業務、以系統框架爲基礎建立的完整的、可運行的程序代碼,它說明了以SF爲基礎如何開發業務系統的問題。要實現生成100%的程序代碼必須參照完整的樣例代碼製作代碼模板,即對樣例代碼整體模板化。以SSH框架爲例,需要將包括Jsp、Js、Config、ApplicationContext、Hibernate hbm、Po、Vo、Do、Dao、Service、Action等在內的所有程序資源製作成代碼模板。這就要求樣例代碼的完整性及對不同業務類型的覆蓋度。

本文提出創建完整的樣例代碼應遵循的原則,如下:

(1)針對不同業務類型建立樣例代碼,如信息管理類、流程審批類、信息發佈類、決策支持類、數據檢索類等。

(2)以(1)爲基礎,建立不同業務實體關聯關係的樣例代碼,如1對1關聯、1對多關聯、多對多關聯等。

(3)以(2)爲基礎,建立不同界面表現的樣例代碼。

3.2.3特定領域建模與代碼生成

特定領域建模是代碼生成的基礎,基於系統架構與框架建立完整的樣例代碼是製作代碼模板的前提,特定領域建模與完整的代碼模板是生成100%的程序代碼的保證。

圖3-2  特定領域建模與代碼生成

如圖所示,本文提出特定領域建模與代碼生成的方法具體過程如下:

(1)領域專家進行特定領域分析,提取領域關鍵概念。

(2)領域建模專家使用XML模式描述領域元模型。

(3)建模工具專家輸入XML模式通過EMF產生特定領域元模型Ecore,通過GMF定製生成特定領域建模工具。

(4)系統分析設計師分析設計實現系統架構與框架。

(5)高級程序員編寫不同業務類型的完整樣例代碼。

(6)領域建模專家進行特定領域設計,通過特定領域建模工具進行特定領域建模,並對模型進行檢查與驗證。

(7)模板製作員將樣例代碼製作成完整的代碼模板。

(8)開發人員結合特定領域模型與代碼模板,使用通用代碼生成引擎生成100%的程序代碼。

與傳統的建模與代碼生成技術相比,本文提出的特定領域建模與代碼生成的方法,從多個角度以多種手段保證了最終生成100%的程序代碼。

3.3代碼模板製作和代碼生成

代碼生成通常使用代碼模板通過代碼生成器生成代碼。代碼模板的好處在於代碼模板的易維護性與代碼生成器的通用性,針對不同領域模型與系統框架,可快速刪減或修改代碼模板以響應環境的變化,而不需要修改代碼生成器。

3.3.1代碼模板製作

代碼模板是代碼的雛形,是對代碼的抽象表達,它固化代碼的共性部分,標記特性部分,在代碼生成時,通過替換將特性部分轉化成實際需要的代碼。代碼模板的共性部分也稱爲靜態內容,特性部分也稱爲動態內容。

代碼模板的特性部分有兩個來源:特定領域模型及系統架構與框架。如針對業務表的增刪改查,共性部分是增刪改查,特性部分是各個業務表。又如數據庫連接,共性部分是連接數據庫,特性部分是數據庫的類型、名稱、訪問地址等。樣例代碼是系統架構與框架的具體體現。代碼模板的特性部分需要由領域模型與樣例代碼共同保障。

本文提出代碼模板製作的2點保障機制,如下:

(1)建立完整特定領域模型,涵蓋代碼模板體現的所有特定領域關鍵概念。

(2)建立完善的樣例代碼,涵蓋代碼模板體現的所有平臺技術相關概念。

本文使用基於籤替換原理的模板引擎Velocity的VTL(Velocity Template Language)製作代碼模板。標籤替換就是根據VTL標記的名稱在特定領域模型中查找相應的值進行替換,形成具體代碼。VTL通過${}與#指令標記代碼模板的特性部分。${}引用動態數據,如變量、對象等,#指令建立模板語言的控制結構,如選擇、循環、引入文檔等。

3.3.2通用代碼生成引擎與代碼生成

通用代碼生成引擎通常由讀入器、驗證器、生成器、編寫器、配置工具5部分組成,共同完成代碼生成。本文在模板引擎Velocity應用程序接口的基礎上進行了功能擴展,建立起通用代碼生成引擎的一個具體實現,如圖3所示:

圖3-3 通用代碼生成引擎與代碼生成過程

各部分功能如下:

讀入器:讀入模型與代碼模板並放入環境上下文中。

驗證器:根據特定領域元模型檢查驗證特定領域模型。

生成器:動態加載VTL標記的特性內容,形成代碼。

編寫器:將代碼寫入到目標代碼文件中。

配置工具:配置生成環境,如資源位置、編碼格式等。

本文基於通用代碼生成引擎的代碼生成過程如下:

(1)   通過配置工具配置代碼生成環境,加載類庫,指定資源存放位置,設置輸入/輸出編碼格式、日誌等信息。

(2) 讀入器根據環境配置中資源存放位置,讀入特定領域模型與代碼模板,並放置入環境上下文。

(3)   驗證器根據環境配置中資源存放位置,讀入特定領域元模型,對特定領域模型進行檢查驗證工作。

(4)   生成器基於標籤替換原理將VTL標記的特性內容替換爲特定領域模型中的相應的值,並形成代碼。

(5)   編寫器將代碼寫入到代碼文件中,完成代碼生成。

3.4本章小結


本章提出一種DSM的實現方法。通過建立特定領域元模型、配置生成特定領域建模工具、分析設計實現系統架構與框架、建立樣例代碼、製作完整的代碼模板、建立通用代碼生成引擎,最終實現了特定領域建模與生成100%的程序代碼。實踐表明,特定領域建模與可生成100%的程序代碼的代碼生成方法是提高軟件生產力的有效手段。

有效的領域分析與設計方法是提取特定領域關鍵概念與創建完整的特定領域元模型的基礎;與傳統建模技術相比,基於DSM的軟件開發關鍵在於能否快速有效的建立特定領域建模工具。這將是以後研究的主要方向。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章