使用 GMF 快速开发支持嵌套图元的编辑器
简介: GMF 是 Eclipse 项目中支持快速开发图形界面的工具包,本文介绍如何使用 GMF 建立嵌套图元来表达层次模型。结合应用示例,从建立领域模型、开发图形定义、工具定义、映射信息直到生成插件代码,详细描述了整个开发过程和其中容易疏忽的问题,并给出对应大纲视图的开发方法。
GMF(Graphical Modeling Framework)是 Eclipse 项目中支持快速开发图形界面的工具包,但是目前相关资料并不丰富,这给开发人员学习和实践带来了一定困难。实际应用中往往需要绘制带有层次关系的模型,由于层次的出现,在表达领域模型、图形绘制信息等方面就要额外处理。本文对比了建立层次模型的两种方法,重点介绍其中的嵌套图元方法。结合一个简单应用,从建立领域模型、开发图形定义、工具定义、映射信息直到生成插件代码,详细描述了整个开发过程和其中容易疏忽的问题,并给出图示。为了辅助显示模型层次,还进一步介绍了对应大纲视图的开发方法。
Graphical Modeling Framework 是 eclipse 项目中支持快速开发图形界面的工具包,它有效地将 EMF 和 GEF 连接在一起,使得开发人员通过定制图形、工具、映射等抽象信息就可以快速创建出功能强大的 Eclipse 图形插件。
实际中往往需要绘制带有层次关系的模型,这相比开发只有一层的模型更为复杂。对于软件开发人员而言,最熟悉的场景莫过于在设计时为系统划分功能模块,继而设计代码包结构。“包”中包含代码“文件”,也可能包含其它“包”,这就构成了项目的层次结构。在同一个“包”中,“文件”之间的关系比较紧密,但由于系统复杂性,不同“包”的“文件”之间往往也存在依赖关系。怎样开发可以表达这种层次关系的编辑器呢?本文重点介绍使用 GMF 建立嵌套图元的方法。
嵌套图元是指通过相互嵌套的图元来表达层次关系,即外层图元作为容器,包含内层图元,从而直观的表达模型的层次结构。这种方法的特点是将不同层次的图元绘制在一个平面上,可以方便的建立各层次图元之间的关联,使得模型的表达方式更加灵活。对于前面提到的应用场景,嵌套图元方法比较适用。可以将“包”作为容器,“文件”作为最小单位的图元;容器可以相互嵌套,也可以包含最小图元,不同容器中的图元可以根据需要建立关联。不过,由于嵌套图元模型中既有全局信息,又有内部细节,复杂度不易控制,适用于规模较小的分布式系统。
与嵌套图元相比,还有另外一种方法可以表达层次关系,即将主模型和子模型相分离,主模型关注高层次的抽象图元,子模型则描述细节。由于主/子模型截然分开,难以表达模块间的复杂关系,适用于松散耦合的系统。两种方法如下图所示。后者在[3]中已有详细介绍,本文主要关注嵌套图元方法。
(A)通过嵌套图元表达层次关系 (B)主模型与子模型相分离
使用 GMF 技术开发编辑器的过程如下图所示。
首先创建 GMF 项目,分别然后建立领域模型、图形定义和工具定义,其中领域模型相当于业务的元模型,定义主要建模元素及其关系;图形定义用于表达各元素的图形绘制信息;工具定义则给出建立模型时需要的工具。在此基础上开发映射模型,将图形定义、工具定义与领域模型连接起来。继而得到生成模型,最后自动产生插件代码。以插件方式运行,即可以完成图形编辑器的基本功能了。