首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

MetaModelEngine:元模型引擎的開發思路與實踐

     編輯:關於.NET

在先前的文章《DSM:使用 MetaEdit+ 編寫 Family Tree Modeling Language》中,我們透過一個家族樹模型語言的範例,初步掌握了領域特定建模(DSM)的核心概念。本文將進一步闡述 OpenExpressApp 平台中元模型引擎 MetaModelEngine 的應用思路與架構設計。

為何借鑒 MetaEdit+ 的設計思想

在《軟體產品線工程方法 - 四個主要方法原則》中提到,產品線工程能帶來降低成本、縮短上市時間、降低風險與提升品質等效益,這正是我們開發軟體產品時所追求的目標。模型驅動開發(MDD)是支撐產品線工程的關鍵方法之一,因此我長期關注 MDD 領域的發展。

軟體工廠架構圖

MetaEdit+ 是全球 DSM 領域內知名的商業化產品,根據其官方資料,採用該工具可獲得以下顯著優勢:

  • 縮短上市時間,開發生產力提升 5 到 10 倍
  • 開發人員可專注於業務功能設計,無需手寫所有底層代碼
  • 基於經驗證的工具鏈,產品品質顯著提升
  • 完全掌控模型與代碼生成過程,避免了傳統 MDA 方法中模型與代碼生成固化、難以適應特定領域開發的缺陷

MetaEdit+ 效益示意圖

模型驅動開發對比

綜上所述,引入 MetaEdit+ 的核心思路,是為了採用一種領域特定的模型驅動開發方法,有效支撐產品線工程的落地。

元模型引擎對 OpenExpressApp 平台的支撐

MetaEdit+ 的相關技術早已納入 OpenExpressApp 的規劃藍圖中。以下架構圖展示了元模型引擎在平台中的定位:

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 的整合,如工具視窗、選單、檔案開關等。

VS DSL 架構圖

MetaEdit+ 組件架構與實現步驟

MetaEdit+ 的組件架構採用漸進式實現路徑:

  1. 圖形編輯器
  2. 矩陣與列表編輯器
  3. 代碼生成器

MetaEdit+ 組件架構

模型架構四層次:GOPRR 元元模型

模型架構分為四層:

  • 元元模型層:GOPRR(Graph、Object、Property、Port、Relationship、Role)
  • 元模型層:領域概念
  • 模型層:產品規格
  • 系統應用層:實例

模型架構四層次

核心元模型概念:GOPPRR

GOPPRR 概念圖

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

屬性與非屬性區分

圖的組成要素

綁定機制

對象引用圖 Decomposition

DSM 實施步驟

實現 DSM 步驟

  1. 設計領域概念(參考《DSM:使用 MetaEdit+ 編寫 Family Tree Modeling Language》)
  2. 尋找領域概念並映射到 GOPPRR 模型概念
  3. 領域概念映射
  4. 定義領域規則,例如:「開始狀態不能直接連接到結束狀態」
  5. 規則定義範例
  6. 規則驗證示意
  7. 繪製標記(Notation)定義視覺化表達
  8. 標記設計
  9. 實現生成器完成代碼自動生成
  10. 生成器實現

主要技術棧與階段性規劃

  • 元模型引擎:核心運行時
  • 圖形編輯器:視覺化建模介面
  • 代碼生成器:模型到代碼的轉換

近期重點:完成元模型引擎與圖形編輯器,基於引擎初步支撐企業架構建模工具;代碼生成器規劃於明年啟動。

轉載請註明:https://zhoujg.cnblogs.com/

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved