在不同的人的眼里,建模的含义有很大的不同,甚至在软件工程学科内也是如此。有些人会立即想到统一建模语言(Unified Modeling Language,UML),有些人会想到模型驱动的体系结构(Model-Driven Architecture,MDA),还有些人可能会追忆CASE工具时代。而随着使用频率的增加,熟悉Eclipse社区的人会想到Eclipse建模架构(Eclipse Modeling Framework,EMF),该架构通过使用实用的建模和代码生成工具,为应用程序开发奠定了坚实的基础。 从Eclipse的工具项目开始,EMF就凭借卓越的质量和无与伦比的社区支持赢得美誉,并导致一些在Eclipse上形成的互补建模项目快速出现。代码生成器、图形表示架构、模型转换、验证和搜索都在EMF的基础上构建,它们现在都包含在Eclipse建模项目中,这个顶级项目的成长和成功主要取决于其核心组件——EMF。 在许多方面,EMF项目都是其他Eclipse项目的模型。从其提交人员孜孜不倦地回答项目新闻组中的问题,到API、特性、性能和文档开发方面的专业性和开放性,EMF都表现得空前绝后。围绕EMF产生的建模社区的多样性,使EMF成为了寻求协作的典范,包括个人贡献人员、商业供应商和学术机构。EMF对于Eclipse极具价值的另一个证据是预期在下一个Eclipse平台e4中使用它。现在,e4平台的开发人员已经计划利用EMF的功能来提供一致并且基于模型的基础和运行库;很明显,这就向模型驱动的软件开发迈进了一步。 由于如此多的技术都建立在EMF的基础之上,因此理解EMF的体系结构和功能对于成功使用该架构至关重要。多年以来,本书的第1版一直是许多开发人员使用EMF构建应用程序、扩展EMF自身功能的重要资源。随着第2版的问世,开发人员将可以了解到EMF的许多增强功能,并有效地加以利用。第1版中关于API的内容被新的章节取代,这些章节将介绍EMF持久化、客户端编程、改动记录、验证和富客户端平台(Rich Client Platform,RCP)开发。除更新了原始材料之外,新版本还讨论了EMF 2.3版和2.4版的最新功能,包括泛型、内容类型和REST API。这是最受欢迎的第2版。 我希望您会像我一样发现本书第2版的价值所在。 Richard C. Gronback Borland Software Corporation首席科学家 2008年11月 序言二 在许多方面,Eclipse建模架构都是一种典型的开源项目。Eclipse基金会(Eclipse Foun- dation)用许多方法来评估每个项目对社区所做贡献的价值。评估标准包括行业采用情况、健壮技术、作为可扩展平台的稳定性以及开放、透明的项目管理方式。在所有这些方面和其他方面,EMF多年以来都是最佳的Eclipse之一。 在行业采用方面,我经常对EMF的极大成功感到非常惊讶。我在Eclipse基金会中的主要任务就是游说人们采用Eclipse技术。不论是刚刚成立的公司,还是企业或者经过确认的软件供应商,能力EMF都是它们使用的主要Eclipse技术之一。EMF简化复杂软件应用程序和产品的开发的能力已经广为人知。很少有一种架构能够在如此众多的领域中极大地提高开发人员的生产率。 这种采用情况主要由一个非常简单的价值定位驱动:EMF是一种优秀的技术。人们对EMF的体系结构、API的完整性、灵活性和性能已经有了足够的重视。性能是将要在现实应用程序中使用的所有技术的关键。 作为一种平台,EMF已经改变了建模工具行业。领先的模型工具供应商(例如Borland和IBM)都将自己的产品建立在EMF的基础之上,并且依据如下方面制定战略决策:EMF是它们未来的核心建模架构。在过去4年内,我见过的几乎每一种新的建模产品都建立在EMF的基础之上。 因此,EMF在行业内被大量采用,但这只是故事的一半。人们也将EMF视为社区成功案例。EMF团队在与社区交互方面始终做得相当出色。Ed Merks是EMF项目负责人,也是本书的作者之一,他在Eclipse社区享有盛誉,因为他始终即时回答所有采用EMF的人员对EMF的质询。这种以身作则的做法让整个EMF团队变成了Eclipse中最注重社区活动的团队之一。 EMF是庞大的Eclipse社区成功案例,我相信本书将进一步推动这种成功。 Mike Milinkovich Eclipse基金会执行总监 2008年11月 前 言 本书全面介绍Eclipse建模架构(Eclipse Modeling Framework,EMF),并指导开发人员学习EMF开发人员指南。EMF是一种强大的架构和代码生成工具,可用于构建基于简单模型定义的Java应用程序。为了使建模对于主流Java编程人员实际有用,EMF统一了3种重要技术:Java、XML和UML。可以使用UML建模工具或者XML Schema定义模型,甚至在Java接口上指定简单的批注也能定义模型。在最后一种情况下,开发人员只编写描述模型的抽象接口的子集,系统将自动生成并合并剩余代码。 通过将建模概念与这些概念的简单Java表示形式关联起来,EMF成功地在建模人员和Java程序员之间架起了一座桥梁。对于Java程序员来说,本书是对建模的系统介绍,同时又是对建模人员理论的强化,这种理论就是:只要有合适的工具,可以自动完成许多编码工作。本书将说明EMF就是这样的工具,并且说明如何使用EMF帮助完成您原先认为使用模型无法完成的许多任务。 EMF提供一种运行库架构,从而可以在UI中更方便地验证、持久化和编辑任何已建模的数据,并且自动支持改动通知和记录。元数据可用于启用使用统一的反射API的任何数据的通用处理。由于EMF具有所有这些功能(甚至更多功能),因此它在Eclipse中是数据共享以及工具和应用程序之间细粒度互操作性的基础。同样,Eclipse本身也是组件和UI级别上的集成平台。许多组织目前都使用Eclipse、EMF以及Eclipse建模项目中不断出现的基于EMF的技术作为自己的商业产品和开源产品的基础。 本书假设读者熟悉面向对象编程的概念,特别是熟悉Java编程语言。以前对建模技术(例如UML)的研究虽然很有帮助,但是现在不需要了解这方面的知识。第I部分(第1章~第4章)主要概述了EMF和建模中一些最重要的概念。这一部分介绍了使用EMF建模和构建应用程序所需的所有基本的Java编程技能。第II部分(第5章~第9章)全面介绍了EMF的元模型Ecore,然后详细介绍了Ecore和其他支持的模型定义形式(UML、带有批注的Java和XML Schema)之间的映射关系。第III部分(第10章~第13章)详细分析了EMF的代码生成器模式和工具,然后介绍了重要的EMF应用程序的端到端示例。第IV部分(第14章~第21章)详细介绍了EMF的运行库架构,并且讨论重要的EMF编程技术。 本书的很多内容基于EMF 2.2,它是支持传统的Java 1.4语言的最新版本。在2.3版本中,EMF采用了Java 5.0的主要语言功能,因而与以前的Java运行库不兼容。在编写本书时,EMF 2.2版本仍然相当普及,因此它是学习EMF的良好基础。第1章到第20章中的代码都基于该版本,但是由于EMF具有向后兼容性,因此所有示例都可以在2.4版本(本书发行时EMF的最新版本)上运行,而不需要执行任何改动。第21章专门讨论了EMF 2.3和2.4中的改动,因此使用EMF 2.4作为其中示例的基础。 联机示例 本书的Web站点是,可以从该站点中下载本书中使用的所有示例模型和代码。该站点还提供了勘误表以及与本书相关的其他新闻。 使用这些示例要求具有Eclipse和EMF。可以从上下载某个Eclipse包(推荐Eclipse Classic),也可以从上下载多合一的EMF SDK。