快速业务通道

EMF介绍系列(二、从模型生成应用程序) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

EMF介绍系列(二、从模型生成应用程序)

时间:2011-04-30 博客园 bjzhanghao

还是从一个例子里看看EMF的使用方法和作用吧。假设我们的应用是一个网上商店,在系 统里有这些对象:商店Shop、类别Category、商品Product,其中类别可以包含子类别。现在 我们用EMF从头到尾生成一个可以管理类别和商品的应用程序。如果你的Eclipse里还没有安 装 EMF,在eclipse.org/emf下载适合你Eclipse版本的EMF SDK,建议你下载全部包含的那种 。安装后,在新建对话框里会增加EMF的类别,如图1所示:

EMF介绍系列(二、从模型生成应用程序) - 编程入门网

图1 新建向导里的EMF类别

其中“EMF Model”是从已有的模型文件创建genmodel模型,这个模型是专门用来生成代 码的;如果你手里已经有一个模型(比如一个.mdl文件或是一个.xsd文件等等),可以选择 新建“EMF Project”,这样在向导的后面部分里会要求提供已有的模型文件;因为我们打算 自己从头开始建立这样的模型,所以选择“Empty EMF Project”,和建立普通插件一样,要 提供一个插件名称,我们为这个商店项目起名为com.my.shop,然后按Finish即完成向导。目 前这个新建立的项目里还没有包含任何代码,只是在META-INF/MANIFEST.MF文件里定义了对 EMF相关插件的依赖。

下面开始定义ecore模型,我比较喜欢图形化的方式,因为看起来很直观,所以我使用 Omondo公司的EclipseUML插件来画类图,这个插件的免费版本在 它们网站下载,注意下载适 合你的Eclipse的版本。当然rose也不错而且更加稳定,但它不是免费的,而且只能在 Windows里使用。和Rose不同,EclipseUML对EMF有特别的支持,安装这个插件后,我就们可 以在项目里新建一个“EMF Class Diagram”,这样会同时创建一个.ecd文件和一个.ecore文 件,EclipseUML编辑的类图信息会保存在这两个文件里,前者主要是图形方面的内容,而后 者是真正的模型信息,注意这两个文件中的任何一个都不要搞丢了,最好能经常备份一下。

在EclipseUML里编辑类图很简单,需要注意的是,两个对象之间如果有关联,要仔细考虑 关联是否为“包含”关系(一般在UML中以黑色菱形表示),如果一个类没有包含在任何其它 类里,则这个类的实例不会被保存到文件。例如图2中Category包含在Shop中,Product包含 在 Category中。这样,所有的对象都直接或间接的被Shop对象包含。换句话说,如果以Shop 作为“根”,所有的对象都可以被保存到文件里。

EMF对java基本类型和一些常用类做了包装,例如int->EInt,java.lang.Integer- >EInteger以及java.util.List->EList等等,所以在定义类的属性时要使用这些EMF的 类型,当然也有办法使用自定义类型(以后会用到)。我们例子里的模型相当简单,一共只 有三种业务对象(为了更加直观,我们增加了一个NamedElement接口),现在网上商店类图 的第一个版本如图2所示。

EMF介绍系列(二、从模型生成应用程序) - 编程入门网

图2 网上商店类图(版本1.0)

EMF介绍系列(二、从模型生成应用程序)(2)

时间:2011-04-30 博客园 bjzhanghao

接下来就要生成代码了。EMF使用JET利用模板生成代码(前面曾介绍过JET),所以要把 ecore模型转换为可以被JET利用的genmodel模型,具体的操作是按 ctrl+n新建一个EMF Model,在这个向导的第一步指定名称shop.genmodel,第二步选择从ecore模型导入,第三步 选择ecore模型文件(shop.ecore),这样就建立了缺省的genmodel模型,在这个模型的基础 上还可以做一些定制工作,例如每个属性的描述信息等等。

有了genmodel模型,离得到可用的java代码就只有一步之遥了。打开shop.genmodel文件 ,在根节点上点开右键菜单(见图3),如果只想生成模型代码选择“Generate Model Code ”,如果需要.edit的代码(EMF提供的一些ItemProvider和AdapterFactory,帮助实现编辑 器)和可用的编辑器,选择“Generate All”最方便,这也是例子里选择的方式。EMF的代码 生成器为模型、.edit、编辑器和测试代码各生成一个插件项目 (com.my.shop/shop.edit/shop.editor/shop.tests),前三个是后者依赖前者的关系。这 里插上一句,即使没有用EMF的项目,也建议把模型和界面使用不同的插件项目分开,这样做 有很多好处,主要是灵活性大大提高了。

EMF介绍系列(二、从模型生成应用程序) - 编程入门网

图3 从菜单里选择生成部分或全部代码

现在可以运行起来看看效果了,注意我们甚至连一句代码也没有写呢。EMF为我们生成了 一个新建向导(New Wizard),利用这个向导可以生成新的Shop实例,注意在第三步要选择 以Shop类为根类型。编辑器的运行界面如图4所示,它的外观虽然有待改进,但功能已经足够 我们对网上商店里的类别和产品进行编辑了。在以后的帖子里,我们要对网上商店的ecore模 型和编辑器的界面做一些修改。

EMF介绍系列(二、从模型生成应用程序) - 编程入门网

图4 缺省的编辑器界面

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号