MetaModelEngine:域模型定义

  每一个DSL的核心都是一个域模型,它定义了这一语言所代表的各种概念,以及这些概念的属性和它们之间的关系,在创建DSL每一个元素时都是使用域模型来描述。域模型还为语言的其他方面的建立提供了基础:图形符号、工具箱、资源管理器、属性窗口、验证、序列化和部署、代码生成等的定义。在MetaModelEngine:元模型引擎开发思路中介绍总体思路,本篇着重考虑一下域模型定义相关内容。

模型架构图

GOPRR为元元模型层、领域概念为元模型层、产品规格为模型层、实例为系统应用层。对于域模型定义,我们主要关注GOPRR这一层。

域模型概念:GOPPRR

  • Graph 图:一个独立模型,通常使用图来表示,我们还支持列表和矩阵两张表格方式的展现
  • Objects 对象:域类
  • Property 属性:图、对象、端口、角色和关系都可以拥有一些属性描述
  • Port 端口:定义角色如何连接对象的可能语义
  • Relationship 关系:域关系
  • Role 角色:连接关系与对象之间

属性和非属性对象

元模型对象分为属性和非属性对象,非属性对象都可以定义多个属性对象。Graph、Object、Port、Role和Relationship都是非属性对象。它们的属性定义如下:

对象属性附加信息说明
PropertyName 名称
 
Ancestor 父属性
 
Project 域模型基于存储库管理,这里指定所属项目 
DatatypeString字符串
 
Text文本备注 
Number数字 
Boolean 布尔 
Createion Timestamp生成日期 
Collection:Item type集合类型,指定集合项类型,可以为String、Graph...、Object...、Port...、Role...、Relationship…
Graph…弹出选择【图形】对象对话框,选择项目中的一个图形对象
Object… 
Port… 
Role… 
Relationship… 
WidgetInput 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),如下图所示:

 

欢迎转载,转载请注明:转载自周金根 [ http://zhoujg.cnblogs.com/ ]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值