GMF:基于Reference的连接

    GMF中的Link有两个,分别是基于Type的和基于Reference的。对于前者,在ecore模型中有一个类对应这个连接,创建一个连接即创建了该类的一个实例,试想,如果一个模型比较复杂,有很多连接时,这种方法要在模型中要为连接建立很多与业务无关的类,使得模型非常复杂;对于后者,没有必要为每个连接在ecore中建立一个类,而是设置该连接对应的Reference即可。下面用一个school的模型来说明基于Reference的连接的建立方法,这个模型非常简单,如下图(用gmf插件生成的对应school.ecore的school.ecore_diagram):一个学校里边有很多老师和学生,每个老师会指导多个学生,这里的指导关系是Teacher类的一个Reference,名字为tutoringStudents,我们打算在GMF编辑器中用Node来表示老师和学生,老师对学生的指导关系用Link来表示。
GMF:基于Reference的连接_第1张图片
    该模型命名为school.ecore, 然后生成school.genmodel,再按照常规方法建立school.gmfgraph, school.gmftool.
    最后建立最关键的school.gmfmap,首先为mapping元素建立两个Top Node Reference,分别对应Teacher和School,然后建立代表老师指导学生关系的link mapping,其属性页中各项按照下图指定值:
GMF:基于Reference的连接_第2张图片   
    注意,Domain meta information中前三项都空着,只在最后一项中指定代表该连接的Reference即可。Validate无错后,生成school.gmfgen,在生成Diagram code,最后运行效果图如下:
GMF:基于Reference的连接_第3张图片
      看一下保存semantic model的school文件: 
<? xml version = " 1.0 "  encoding = " UTF-8 " ?>
< School:School xmi:version = " 2.0 "  xmlns:xmi = " http://www.omg.org/XMI "  xmlns:School = " http://example.School " >
  
< teachers name = " ProfessorLi "  tutoringStudents = " //@students.0 //@students.1 " />
  
< students name = " Tom " />
  
< students name = " Mary " />
</ School:School >

   

你可能感兴趣的:(GMF:基于Reference的连接)