在DSM:使用MetaEdit+編寫Family Tree Modeling Language中介紹了MetaEdit+的一個家族樹模型語言應用示例,通過示例的學習掌握了基本的概念,本篇將介紹一下OpenExpressApp的元模型引擎MetaModelEngine的應用思路。
為何借鑒MetaEdit+思想
我在軟件產品線工程方法 - 四個主要方法原則提到產品線帶來的幾個好處:減少成本,快速上市,減少風險和提高質量,這些都是我們在做軟件產品時都期望達到的。在我以前blog中也有一個軟件工廠的圖,該圖表明了模型驅動開發是支持軟件產品線工程的一種方法,所以我會比較關注模型驅動開發。
在信息系統開發平台OpenExpressApp - 總體架構的由來中我講到過MetaEdit+是全球DSM領域內著名的產品,它能夠帶來產品線中期望的幾個好處:
縮短上市時間,開發生產力能夠提高5-10倍
開發人員可以集中設計和關注業務功能,而不必用代碼去寫所有方面的內容
由於使用的是經過驗證的工具,產品質量顯著提高
可以完全控制模型和代碼生成,而不像MDA方法模型和代碼生成固定,不便於特定領域開發
通過以上說明可以看出,我借鑒MetaEdit+的思路是想采用一種模型驅動開發方法來支持產品線工程。
元模型引擎對OpenExpressApp平台的支持
知道MetaEdit+已經好多年了,之前也研究過這個工具,並查看過它的一些資料,也是在OpenExpressApp計劃之中的重要組成部分。
支持OpenStudio的圖形化建模,讓業務人員能看、能做,符合OpenExpressApp讓業務人員編寫軟件的價值主張,通過業務人員更早更多的參與,可以更快的構建應用
支持OpenTool的工具:快速原型開發工具、圖形化自動化測試工具等
Visual Studio的DSL架構
Microsoft.VisualStudio.Modeling:域模型框架時整個系統的核心,負責管理模型的元素和連接,也就是域類和域關系的實例。
Modeling.Disgrams:設計界面框架建立在域模型框架之上,它負責處理圖形符號的顯示,包括處理圖表、圖形、連接器和裝飾等元素在設計界面上的顯示
Modeling.Validation:驗證框架負責執行關於模型元素和連接的驗證方法,如果驗證失敗,它還要負責創建錯誤對象。它與Shell框架交互,把錯誤信息顯示到Visual Studio的錯誤窗口
Modeling.TextTemplation:模板引擎負責執行文本模板來生成代碼或其他的工件。模板引擎室一個獨立的組件,用於執行來自非DSL的模板輸入
Modeling.Shell:建模用的Shell負責管理將涉及器集成到Visual Studio中,例如處理工具窗口和菜單名利,以及文件的打開和關閉等
對MetaEdit+的技術借鑒
組件架構圖
MetaModel實現步驟:圖形編輯器(Diagram Editor)-> 矩陣和列表編輯器(Matrix和Table Editor)-> 代碼生成器
模型架構圖:GOPRR為元元模型層、領域概念為元模型層、產品規格為模型層、實例為系統應用層
元模型概念GOPPRR:圖、對象、屬性、端口、關系、角色
Graph 圖:一個獨立模型,通常使用圖來表示
Objects 對象:圖的主要元素,例如例子中的Person
Property 屬性:圖、對象、端口、角色和關系都可以擁有一些屬性描述
Port 端口:定義角色如何連接對象的可能語義
Relationship 關系:讓對象連接在一起
Role 角色:連接關系與對象之間
屬性和非屬性
圖的組成
綁定Binding
對象引用圖 Decomposition
實現DSM步驟
設計領域概念(參考示例:DSM:使用MetaEdit+編寫Family Tree Modeling Language)
找到領域概念
把領域概念映射到模型概念GOPPRR:圖、對象、屬性、端口、關系、角色
定義領域規則
定義規則
規則例子:【開始】狀態不能直接連接到【結束】狀態
畫標記
實現生成器
主要技術及初步計劃
元模型引擎
圖形編輯器
代碼生成器
今年下半年主要實現元模型引擎以及圖形編輯器,基於引擎初步支持企業架構建模工具。代碼生成器放在明年開始。
轉載請注明:http://zhoujg.cnblogs.com/