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

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

图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所示。

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

时间: 2025-01-20 14:12:26

EMF介绍系列(二、从模型生成应用程序)的相关文章

EMF介绍系列(三、定制应用程序的基本方法)

借助EMF的帮助,不用亲自编写一行代码就可以生成一个完整的应用程序,你是不是对EMF 有些感兴趣了?不过生成的应用程序看起来都像是从同一个模子里出来的,即一个多页编辑 器,一个大纲视图和属性页,这当然无法满足所有人的需求.不用耽心,只要了解EMF的机制 ,按照我们的要求修改这个应用程序并不是一件很困难的事情. 首先大概的看一下EMF为我们生成了哪些东西吧.按照前文的操作,EMF应该一共生成了四 个插件项目:com.my.shop. com.my.shop.edit.com.my.shop.edi

EMF介绍系列(五、定制应用程序界面)

第三篇帖子介绍了定制一个EMF应用程序的基本方法,这一篇让我们来看看怎样定制应用 程序的使用界面.没有任何一个界面是万能的,所以定制工作不可避免,而大多数定制都是 通过修改代码来实现的.在实际应用中,同一个需求可能有多种修改方式可以实现,我认为 修改涉及的地方(类,方法)越少越有利于发挥EMF的优势,因此我们应该对EMF生成的代码 有一定的了解,这是发挥自己创造力的基础. 下面有几个常见的需求,通过对这些需求的实现,相信你会对EMF应用程序的开发过程有 一个更具体的认识. 一.简化模型创建向导

EMF介绍系列(四、枚举类型、自定义类型和Map)

除了普通的类(接口)以外,在类图里可以定义一些特殊的元素,比较常见的是枚举类型 .自定义类型,它们对于一个完整可用的模型也是必不可少的,这篇帖子主要介绍EMF里它们 的使用方法.另外,由于EMF对Map的支持比较特别,所以在这里也简要介绍一下Map类型的定 义方法. 枚举类型 继续前面帖子的例子,现在要为产品增加一个评分属性,评分值可以是好中差之一,像这 样属性值只能是有限几个值之一的属性就应该定义为枚举类型(Enumeration).在类图里首 先创建一个名为Score的枚举类型,然后为它增加

EMF介绍系列(七、.Edit初步)

EMF除了生成模型部分的接口和实现类(不妨称作"核心模型")以外,还生成一个名称 以.Edit结尾的项目,包含一些与核心模型和编辑器关系都十分紧密的代码.这部分代码经过 了精心设计,可重用的程度是相当的高.它们不仅在EMF生成的编辑器项目里大量被用到,我 们自己在扩展编辑器的时候也应该充分利用. 在线商店的例子里,com.my.shop.edit项目里包含一个ItemProviderAdapterFactory类和 一组 ItemProviderAdapter的子类,后者是和核心模型的

EMF介绍系列(一、EMF与MDA)

接触Eclipse一段时间的朋友应该都听说过EMF这个名字,EMF是Eclipse Modeling Framework的缩写,它是Eclipse的一个重要的子项目,如果翻译成中文就是"Eclipse 建模框架".其实只从这个名字还真是难以确定它的作用是什么,我认为要完全掌握 EMF应该对模型驱动开发(MDA)有一定的了解,而EMF可以看作是Eclipse上的MDA一个实现(代 码生成是MDA 的重要组成部分之一),它能够生成在Eclipse上执行的代码.可惜我对MDA没 有系统研究过

EMF介绍系列(六、自定义命令)

EMF生成的应用程序里,用户的发出的每一条命令都是可以撤销(Undo)的,例如修改了 产品的价格,按一下撤销按钮就能恢复原来的价格,当然还可以通过重做(Redo)再回到新 的价格.为了实现这个功能,应用程序里维护了一个用于存放命令的类似栈的数据结构 (CommandStack),每一条执行过的命令都被存放在那里,需要撤销时取出最近一条命令进 行撤销.这个数据结构是由EditingDomain对象负责维护的, EditingDomain相当于编辑模型 时的环境. 在EMF里命令框架实际上可以分为两

系列二VS项目软件配置工具介绍

原文:系列二VS项目软件配置工具介绍 Svn和VisualSvn介绍      在使用TortoiseSvn(SVN客户端)+ AnkhSvn(VS2008插件) +VisualSvn Server(版本控制服务器)进行源代码版本控制前,有必要先了解下Subversion(Svn).     Svn(Subversion)是近年来崛起的版本管理工具,是CVS的接班人.目前,绝大多数开源软件都使用Svn作为代码版本管理软件.      Svn客户端: Subversion的客户端有两类,一类是we

WPF入门教程系列二——Application介绍

原文:WPF入门教程系列二--Application介绍 一.Application介绍 WPF和WinForm 很相似, WPF与WinForm一样有一个 Application对象来进行一些全局的行为和操作,并且每个 Domain (应用程序域)中仅且只有一个 Application 实例存在.和 WinForm 不同的是WPF Application默认由两部分组成 : App.xaml 和 App.xaml.cs,这有点类似于 Asp.Net WebForm,将定义和行为代码相分离. 微

VSTO之旅系列(二):创建Excel解决方案

原文:VSTO之旅系列(二):创建Excel解决方案   本专题概要 引言 创建VSTO项目 Excel对象模型 创建Excel外接程序 创建Excel文档级自定义项 小结   一.引言 也许很多朋友都没有听说过VSTO这个东西的,本人之前也同样也不知道的,但是由于工作的原因接触了这方面,由于VSTO方面国内的资料比较少,本人刚开始学习的时候都是参考MSDN的,但是上面很多资料都是英文的,可能学习起来会比较慢点,所以本人把最近一段时间学习的内容记录下来,一来是作为一个巩固的学习笔记,二来希望这些