用编程代码编写 GUI 常常导致混乱的设计,这反过来导致业务逻辑和 UI 代码之间的混淆。本文探讨如何创建带有配套 Java 框架的声明性 XML UI 标记集合,以便在运行时解析、构造并最终将已声明的GUI 组件绑定到业务逻辑。
简介
GUI 开发可能是令人畏惧的任务。GUI 框架并不是总是拥有良好的文档,需要的代码量可能迅速增长,拖慢开发工作流。特别是支持这些 GUI 框架的拖放工具和 IDE 通常诱使 GUI 软件开发人员创建难以管理和阅读的代码。这可能会进一步混淆业务逻辑和 GUI 描述代码之间的界限,从而使软件维护更加困难。
常用缩略词
API:应用程序编程接口
DOM:文档对象模型
GUI:图形用户界面
HTML:超文本标记语言
IDE:集成开发环境
JAR:Java 压缩文档
UI:用户界面
URI:统一资源标识符
XML:可扩展标记语言
XSD:XML 模式信息集模型
W3C:万维网联盟
这就是声明性 UI 语言之所以方便的原因。UI 语言描述 “是什么”,而不是 “该如何”。例如, HTML 描述显示的内容,而不是描述用于呈现内容的呈现函数。声明性语言并不指定 “该如何”,从而省略了控制流。尽管这种省略听起来好像一种限制,但它实际上是一种优点,因为控制流的副作用 — 如修改全局状态(比如变量)或调用其它函数或方法 — 被消除了。选择声明性语言还有利于将 UI 代码和应用程序代码分隔开来。这种分离将来还能提供一些好处,比如明确区分项目和团队角色,这甚至有可能降低业务逻辑和多个视图或视图技术之间的集成成本。
目前正在使用的声明性 XML UI 的例子不在少数。使用 GNOME 桌面环境的Linux 和 UNIX 操作系统有 Glade。Microsoft Windows 用户拥有 Extensible Application Markup Language (XAML),该语言支持丰富的功能,包括在 XML 中插入代码。Adobe Flex Framework 的MXML 格式为 Adobe Shockwave (SWF) 播放器描述 GUI 并包含代码插入。参阅 参考资料 中的链接了解更多信息。
Java 技术中的基本声明性 UI 框架的必要组件可能包括:
验证:使用 XML Schema
一个 DOM:处理具体事宜的自定义 DOM,比如同步 GUI 组件状态和 XML 节点状态
持久性: GUI 的编组(marshalling)和解组(unmarshalling)
图像数据:存储为 Base64 数据
Swing 组件:GUI 开发常用的Swing 组件的表示
下面可以创建声明性 XML 了,创建过程中要谨记上述必要组件。