JRuby 可以使用 Java 的 GUI 库,因而诞生了很多访问JRuby GUI APIs 的方式。 Glimmer 就是其中一个使用了SWT工具集的后起之秀。
我们采访了 Glimmer 的创建者 Andy Maleh ,以此来了解该项目及其未来发展趋势。Andy 这样论述 Glimmer 背后的设计原则说:
Glimmer 起初的目标是通过一个健壮的平台、独立的 UI 技术来简化使用 Ruby 开发桌面应用的过程。Eclipse SWT 正好符合上述要求,因此在对 Ruby 的 JRuby 实现过程中它得到了重用。 Glimmer 的 API 设计遵循以下原则:
- 简明而不重复
- 以最小的代价去完成任务
- 规则优于配置
- 对 SWT 开发者友好
此外,API 的设计充分利用了 Ruby 的每个语言技术优势来简化桌面应用开发。构建式语法就是上述技术之一,开发者利用该技术构建桌面应用的界面就像使用 HTML 来构建 web 界面一样。这是通过编写与界面相匹配的代码来实现的。
然而,Glimmer 的目标超出了这个范畴。例如,Glimmer 拥有内建的数据绑定支持以及可定制的默认设置。
Glimmer 不仅在语法上求简,在架构上也是。它很容易扩展,而且无须开发者对要增加的关键字硬编码。这实际上也是为什么 Glimmer 能够支持第三方小部件的原因。
JFace 是构建在基本的 SWT 部件之上的一套组件,Glimmer 也一样:
Glimmer 现在与 JFace 协同工作。事实上,只要有构造方法,它就可以支持任何 SWT/JFace 组件的定制。Glimmer 还可以用来构建如视图和编辑器这样的 RCP UI 组件。在我刚着手开发 Glimmer 的数据绑定支持时,我确实曾考虑过重用 JFace 的数据绑定框架。然而,最新的 API 需要调用静态类型的方法,这与 Ruby 的动态特性背道而驰,因此在 Ruby 中从头开始开发数据绑定支持可能会更简单。
查看 Glimmer 的数据绑定方式 来了解更多。
GUI 库非常重要的一个方面是组件布局,Glimmer 当然也没有忽视这一点:
Glimmer 对组合部件如 Shell,Composite 和 Group 有非常棒的默认布局支持。例如在声明一个 Composite 时,常用的 GridLayout 就会作为其默认布局。当然也可以根据需要改变该默认的布局。
当被问及 Glimmer 的现有特性及未来计划时,Andy 说:
Glimmer 现在支持:
- 以合适的默认值对 SWT 和 JFace 组件进行渲染,这包括 Shell、Composite、Group、Text、Button、Spinner 以及 Label
- Text、Spinner、Check-box Button、Radio Button 和 Table 的数据绑定
- 对于新的关键字通过编写命令处理器来扩充语法的能力
在不久的将来,Glimmer 将对其他部件提供数据绑定支持,例如:Tree、Combo 和 List,同时还会对 SWT 和 JFace 中其他的部件提供默认值。
未来计划包括:
- 探索简化 RCP 开发的方案
- 当 SWT 提供对 Ajax 的支持时,增加拥有 Ajax 组件的 Rails 支持
Glimmer 被提议将其作为 Eclipse 项目。Andy 解释了背后的原因:
创建 Eclipse 项目有几个动因:
- 通过 Eclipse 社区的帮助提高 Glimmer 的健壮性和可靠性
- 从经验丰富的 Eclipse 开发者那里获得反馈
- 提升知名度,获取更广泛的支持
在简化使用 Ruby 进行 Eclipse 开发上,GUI DSL 是一个好的开始,但仅仅是冰山一角。未来的计划确定会包括探索如何简化 RCP 的开发,使用 JRuby 脚本来创建 Eclipse 插件也可能会被列入计划。
我尚且还没有仔细思考目前插件开发中存在的问题,但有两个地方可能会从 Ruby 的表达式语法中获益,那就是扩展点定义及插件的配置和集成。
查看英文原文: Glimmer - using JRuby and SWT for Eclipse RCP apps - - - - - -
译者简介:张龙,同济大学软件工程硕士,现就职于理光软件研究所。主要从事文档工作流和办公自动化解决方案的研发工作。热衷于 Java 轻量级框架的研究,对敏捷方法很感兴趣。曾有若干年的 J2EE 培训讲师经历。参与 InfoQ 中文站内容建设,请邮件至 china-editorial[at]infoq.com 。
评论