MetaModelEngine:域模型定义
每一個DSL的核心都是一個域模型,它定義了這一語言所代表的各種概念,以及這些概念的屬性和它們之間的關系,在創建DSL每一個元素時都是使用域模型來描述。域模型還為語言的其他方面的建立提供了基礎:圖形符號、工具箱、資源管理器、屬性窗口、驗證、序列化和部署、代碼生成等的定義。在MetaModelEngine:元模型引擎開發思路中介紹總體思路,本篇著重考慮一下域模型定義相關內容。?
模型架構圖
GOPRR為元元模型層、領域概念為元模型層、產品規格為模型層、實例為系統應用層。對于域模型定義,我們主要關注GOPRR這一層。
域模型概念:GOPPRR
- Graph 圖:一個獨立模型,通常使用圖來表示,我們還支持列表和矩陣兩張表格方式的展現
- Objects 對象:域類
- Property 屬性:圖、對象、端口、角色和關系都可以擁有一些屬性描述
- Port 端口:定義角色如何連接對象的可能語義
- Relationship 關系:域關系
- Role 角色:連接關系與對象之間
屬性和非屬性對象
元模型對象分為屬性和非屬性對象,非屬性對象都可以定義多個屬性對象。Graph、Object、Port、Role和Relationship都是非屬性對象。它們的屬性定義如下:
| 對象 | 屬性 | 附加信息 | 說明 |
| Property | Name | 名稱 ? | |
| Ancestor | 父屬性 ? | ||
| Project | 域模型基于存儲庫管理,這里指定所屬項目 | ||
| Datatype | String | 字符串 ? | |
| Text | 文本備注 | ||
| Number | 數字 | ||
| Boolean? | 布爾 | ||
| Createion Timestamp | 生成日期 | ||
| Collection:Item type | 集合類型,指定集合項類型,可以為String、Graph...、Object...、Port...、Role...、Relationship… | ||
| Graph… | 彈出選擇【圖形】對象對話框,選擇項目中的一個圖形對象 | ||
| Object… | |||
| Port… | |||
| Role… | |||
| Relationship… | |||
| Widget | Input Field | 輸入框 | |
| Editable List:Values | 列表編輯 | ||
| Fixed List:Values | 枚舉值 | ||
| Default Value | 默認值 | ||
| Value Regex | 正則檢查串 | ||
| Description | 描述 | ||
| Object Relation Role Port Graph 的基本信息 | Name | 名稱 | |
| Ancestor | 父對象 | ||
| Project | 所屬項目 | ||
| Properties[] | Local name | 屬性作為公共對象存儲,在對象本身中引用后可以設定屬性在本對象中顯示的名稱 | |
| Unique? | 是否唯一 ? | ||
| Description | 描述 |
圖形對象
在MetaEdit+中式通過如下窗口進行定義的:
??
它們之間是通過一個叫做綁定Bindings的虛擬對象關聯起來的。在綁定中可以包含多個關系,每個關系可以包含兩個或更多的角色,每個角色可以包含多個對象,關系如下圖所示:
注:圖中還可以定于約束,這個在現階段不考慮。
域關系
圖形對象由Relationship、Roles、Objects三種對象組成,關系鏈接多個對象,關系與關系之間不進行連接:
- 關系是有方向的
在圖中綁定設置中定義關系時,每個關系都是有先后順序的,定義是第一個Role為關系的源,也就是我們畫關系時連接的第一個對象代表的Role,其他順序依次類推。
- 重數(Cardinality)
對于關系綁定中對于Roles,我們可以指定重數(1,0..1,0..N,1..N),如下圖所示:
?本文轉自 jingen_zhou 51CTO博客,原文鏈接:http://blog.51cto.com/zhoujg/524447,如需轉載請自行聯系原作者
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的MetaModelEngine:域模型定义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【全栈React】第13天: 重复元素
- 下一篇: Android UI开发第八篇——Vie