eBay 的表示层架构与 Eclipse

  • Charles Humble
  • 张龙

2008 年 4 月 17 日

话题:Java开源DevOps语言 & 开发架构

eBay 权威人士 Michael Galpin 在 IBM 开发者网站上发表了一篇包含两部分的文章,讲述了 eBay 广泛使用 Eclipse 插件和代码生成器以改善开发者体验和代码质量。

第一篇文章讲述了 eBay 从之前基于 Perl 的表示层架构迁移到现在的 Java 版本——即我们熟知的 V4——的进化过程: 

 “V4 架构采取的方式是利用后端强类型的 Java 对象来表示前端使用的任何东西。你的页面使用图片吗?那么就有一个针对该图片的 Java 对象。如果你想删除该图片,其复杂程度和删除任何其他 Java 类一样。对于超链接、CSS 及 JavaScript 来说同样如此。V4 没有使用 servlets 或者 JSPs 来创建 HTML。相反,实际的 HTML DOM 是以 Java 语言表示的,因此你可以在服务器端把 CSS 和 JavaScript 捆绑在一起。

其中最困难的地方——内容——怎么样呢?V4 的内容系统是独特且强大的。它使用它自己的基于 XML 的语言来创建内容契约。单词契约的选择是有意图的。契约定义了创建变化的内容单元所需要的数据。例如,一个特定的单元在英语中可能需要一个整数和一个字符串(如“Raymond has 4 cars”),但是在另一门语言中却需要两个整数和一个字符串。对于性别和基数来说更是如此。契约用 XML 来定义这些内容。接下来由一个特定的应用 / 页面 / 组件所支持的每种语言分别去实现契约。当然,它必须要转化为 Java 中的强类型对象,这样当使用时就会提供所有的动态数据(就像上面提到的“Raymond”和“4”)。因为万物皆是强类型的 Java 对象,所以它们就要遵循编译的规则。如果应用开发者没有在其 Java 代码中提供那两个参数,那么代码就无法通过编译。

这篇文章继续讲述了 eBay 是如何实现构成应用的不同语言的 Java 表示。JavaScript 作为原生代码并且由 Java 代理,一开始会使用 CSS 文件,但是随后就被 Java 的 class 文件替换掉了,该 class 文件在运行时会产生出 CSS,内容契约 XML 也被转化为 Java,凡此种种。这种 eBay 模式的核心点在于使用 Eclipse 代码生成器以进行这些繁琐的转换。eBay 已经开发出了一个 Eclipse 插件以将每种源文件(JavaScript、CSS、XML)转化为其相应的 Java 表示,并且还提供一个自定义编辑器来处理气特有的 XML 格式。这篇文章以一个示例结束:针对 V4 组件运行一个 eBay 实例,并在 Eclipse 中直接打开该组件。

第二篇文章讲述了 eBay 如何联合使用 XML 文件格式和另一个私有插件以管理其项目依赖。XML 文件插件使得 Eclipse 产生必要的项目和 classpath 文件,根据其 XML 契约,第二个插件提供了 XML 编辑器。

eBay 不但开发自己的 Eclipse 插件,他们还使用很多第三方插件。不得不提的两个插件是进行源代码控制的 Rational ClearCase 插件以及静态代码分析工具 FindBugs,eBay 使用 FindBugs 来部分验收其所有源代码。

这其中一个重要方面就是 Eclipse 平台的开源本性。既然源码是开放的,对于 eBay 来说将其私有的插件集成到 IDE 里面就是非常直接的了。

查看英文原文:eBay's Presentation Architecture and Eclipse
译者简介:张龙,同济大学软件工程硕士,现就职于理光软件研究所。主要从事文档工作流和办公自动化解决方案的研发工作。热衷于 Java 轻量级框架的研究,对敏捷方法很感兴趣。曾有若干年的 J2EE 培训讲师经历。参与 InfoQ 中文站内容建设,请邮件至china-editorial[at]infoq.com
Java开源DevOps语言 & 开发架构