在先前的文章《DSM:使用 MetaEdit+ 編寫 Family Tree Modeling Language》中,我們透過一個家族樹模型語言的範例,初步掌握了領域特定建模(DSM)的核心概念。本文將進一步闡述 OpenExpressApp 平台中元模型引擎 MetaModelEngine 的應用思路與架構設計。
為何借鑒 MetaEdit+ 的設計思想
在《軟體產品線工程方法 - 四個主要方法原則》中提到,產品線工程能帶來降低成本、縮短上市時間、降低風險與提升品質等效益,這正是我們開發軟體產品時所追求的目標。模型驅動開發(MDD)是支撐產品線工程的關鍵方法之一,因此我長期關注 MDD 領域的發展。

MetaEdit+ 是全球 DSM 領域內知名的商業化產品,根據其官方資料,採用該工具可獲得以下顯著優勢:
- 縮短上市時間,開發生產力提升 5 到 10 倍
- 開發人員可專注於業務功能設計,無需手寫所有底層代碼
- 基於經驗證的工具鏈,產品品質顯著提升
- 完全掌控模型與代碼生成過程,避免了傳統 MDA 方法中模型與代碼生成固化、難以適應特定領域開發的缺陷


綜上所述,引入 MetaEdit+ 的核心思路,是為了採用一種領域特定的模型驅動開發方法,有效支撐產品線工程的落地。
元模型引擎對 OpenExpressApp 平台的支撐
MetaEdit+ 的相關技術早已納入 OpenExpressApp 的規劃藍圖中。以下架構圖展示了元模型引擎在平台中的定位:

元模型引擎主要支撐以下兩大核心能力:
- 支撐 OpenStudio 圖形化建模:讓業務人員「能看、能做」,貫徹 OpenExpressApp 讓業務人員直接編寫軟體的價值主張。業務人員越早、越深度地參與,應用構建速度越快。
- 支撐 OpenTool 工具集:包含快速原型開發工具、圖形化自動化測試工具等,構建完整的工具生態。
技術借鑒與架構設計
Visual Studio DSL 架構參考
Microsoft Visual Studio 的 DSL 架構提供了寶貴的參考,其核心組件包括:
- Microsoft.VisualStudio.Modeling(域模型框架):系統核心,負責管理模型元素與連接(域類與域關係的實例)。
- Modeling.Diagrams(設計界面框架):建立在域模型之上,處理圖形符號顯示,包括圖表、圖形、連接器與裝飾元素。
- Modeling.Validation(驗證框架):執行模型元素與連接的驗證,失敗時創建錯誤對象並透過 Shell 框架顯示於 VS 錯誤視窗。
- Modeling.TextTemplation(模板引擎):獨立組件,負責執行文本模板生成代碼或其他產出物。
- Modeling.Shell(建模 Shell):管理建模工具與 VS 的整合,如工具視窗、選單、檔案開關等。

MetaEdit+ 組件架構與實現步驟
MetaEdit+ 的組件架構採用漸進式實現路徑:
- 圖形編輯器
- 矩陣與列表編輯器
- 代碼生成器

模型架構四層次:GOPRR 元元模型
模型架構分為四層:
- 元元模型層:GOPRR(Graph、Object、Property、Port、Relationship、Role)
- 元模型層:領域概念
- 模型層:產品規格
- 系統應用層:實例

核心元模型概念:GOPPRR

- Graph(圖):獨立模型,通常以圖形式表示
- Object(對象):圖的主要元素,如範例中的 Person
- Property(屬性):圖、對象、端口、角色、關係均可擁有屬性描述
- Port(端口):定義角色連接對象的可能語義
- Relationship(關係):將對象連接在一起
- Role(角色):連接關係與對象之間的媒介




DSM 實施步驟

- 設計領域概念(參考《DSM:使用 MetaEdit+ 編寫 Family Tree Modeling Language》)
- 尋找領域概念並映射到 GOPPRR 模型概念

- 定義領域規則,例如:「開始狀態不能直接連接到結束狀態」


- 繪製標記(Notation)定義視覺化表達

- 實現生成器完成代碼自動生成

主要技術棧與階段性規劃
- 元模型引擎:核心運行時
- 圖形編輯器:視覺化建模介面
- 代碼生成器:模型到代碼的轉換
近期重點:完成元模型引擎與圖形編輯器,基於引擎初步支撐企業架構建模工具;代碼生成器規劃於明年啟動。
轉載請註明:https://zhoujg.cnblogs.com/