用 Eclipse Modeling Framework 实现模型驱动开发,第 1 部分

本文是使用Eclipse Modeling Framework (EMF)进行模型驱动开发的系列教程第一部分,通过介绍如何创建和使用EMF模型,结合UML、XML Schema,帮助开发者实现Java代码生成和Javadoc注释。
摘要由CSDN通过智能技术生成

转自http://www.ibm.com/developerworks/cn/linux/opensource/os-ecemf1/ 

用 Eclipse Modeling Framework 实现模型驱动开发,第 1 部分

创建 UML 模型并生成代码

 

级别: 初级

Adrian Powell, Advisory I/T Specialist, IBM

2004 年 4 月 01 日

Eclipse Modeling Framework(EMF)是一个开放源代码的模型驱动应用程序开发框架。它可以基于 XML Schema、UML 或经过注释的 Java 中指定的模型,创建 Java 代码,实现图形化的数据编辑、操纵、读取和序列化。EMF 是 IBM WebSphere Studio 和 Eclipse 项目中很多工具的基础。本文将帮助您逐步了解创建模型、生成代码、使用生成的应用程序和定制编辑器的整个过程。

EMF 究竟是什么?


Eclipse Modeling Framework(EMF)是一个开放源代码的框架,它的目标是实现模型驱动架构(Model-Driven Architecture)的开发。如果我们当中的少数人有幸得到了某个 UML 模型,那么这个框架就可以帮助我们将文档变成代码。至于其他人,这个工具也使您又有一次机会向老板证实,把时间花在为解决方案建模上是值得的。除了可以生成令人赞叹的 Java 代码之外,EMF 还可以生成 Eclipse 插件,以及图形化的可定制编辑器。当您改变模型时(这种情况真的会出现),EMF 可以通过单击一个按钮,就使代码和模型保持同步。

EMF 生成的代码也不是一种只配丢进垃圾箱的解决方案。这种代码支持标准的创建、获取、更新和删除操作,而且还支持元数约束、复杂关系和继承结构、屏蔽定义,以及一套属性描述。生成的代码还提供通知、参照完整性和可定制的 XMI 持久性。您所需要做的全部工作就是创建一个对象模型,就像您以前也想做的那样。

EMF 是比较新的事物,但前景广阔,对它持续支持的力度也很强。它实现的是一项公共标准,即对象管理组织(Object Management Group)的元对象工具(Meta-Object Facility,MOF)。现在 EMF 已经对 MOF 的第二版进行了增强。更进一步看,EMF 还是 EMF:XSD 以及 Hyades 等 Eclipse 项目的基础,大多数 IBM WebSphere Studio 产品也都使用它。EMF 第二版的开发已经开始,开发构建应该很快就会出炉。第二版开发计划中包括更好的 XML Schema 支持、更灵活的代码生成方式以及模型之间的映射机制。





回页首


让工具自己说话


商业宣传已经说得够多了。现在让我们直接进入代码中,看看 EMF 到底能做些什么。下面的例子都是用 Eclipse 3.0M7 和 EMF 2.0.0,再加上与之匹配的 XSD 工具箱实现的。现在有四种独立的 EMF 开发流程,每一种都适用于不同版本的 Eclipse,所以一定要保证根据您的 Eclipse 版本选择了正确的 EMF 版本(请参阅 参考资料中的链接,获取这些插件)。

我们将以一个简单的 Web 论坛为例,向您展示最重要的特性。模型的根为 Forum ,下面包括一组 MemberTopic 。每一个 Topic 都具有一个 TopicCategory (枚举类型), MemberTopic 通过 Post 类间接相关联,这两者之间也存在直接关联,因为 Member 可以创建 Topic

用 UML 和 Omondo 创建 EMF 模型


Omondo 的 UML 插件是在 Eclipse 中创建 UML 文档的方便可靠的工具。它看起来就像是 Rational Rose 受冷落的小兄弟,但除非是您需要特别强大的功能,否则用它就可以工作得很好了。不过,该工具尚不支持 Eclipse 3,所以我采用 Eclipse 2.1 来创建 UML 类图。

一开始,我们创建一个新的 Java 项目 UMLForum,以及一个新包 com.ibm.example.forum 。再创建一个新的 EMF 类图, forum.ucd ,存放在 src/com/ibm/example/forum 下。目录中创建了两个文件,forum.ecd 和 forum.ecore。向类图中增加一个新类,名为 Forum ,然后单击 Finished。向 Forum 类中增加一条属性描述,类型为 EString (对于所有的简单 Java 类都有相应的 Ecore 类),如图 1 所示。对于属性的特性,只选择 changeable ,并将范围设为从 0 到 1。

如果您过一会改主意了,想使用其他的特性,可以打开 Properties 视图,选择其中的类或属性。



图 1. 新建的 Forum 类及其属性的性质
新建的 Forum 类及其属性的性质

对于下列接口重复上述步骤:

接口 属性 类型
Member nickname EString
Topic title EString
Post comment EString

为定义关联,我们可以选中关联按钮,然后单击关联的源( Forum )和目标( Member )。这样将打开关联属性设置对话框。在其中将名字设置为 members ,确保仅仅选择了 changeable 和 containment,然后将上限设为 -1。在第二个 Association End 选项卡中,取消选中的 Navigable,然后单击 Ok。对 ForumTopic 也执行相同的操作,属性名称从 members 改为 topics 。取消选中的 navigable,从而创建一个无方向的关联,但我们想让其他属性都保持为双向。

按照下表所示完成关联设置:

目标 关联 名称 特性 范围
Member Topic 1st Association topicsCreated changeable 0 到 1
2nd Association creator changeable 0 到 1
Topic Post 1st Association posts Containment, changeable 0 到 -1
2nd Association topic changeable 0 到 1
Member Post 1st Association posts
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值