XML 和 Java 技术: 数据绑定的多种用法

XML 和 Java 技术: 数据绑定的多种用法

绑定哪些数据,如何使用它们?

Brett McLaughlin, 作家兼编辑, O'Reilly Media Inc.
Brett McLaughlin 的照片
Brett McLaughlin 自从 Logo 时代以来一直从事计算机方面的工作。(还记得那个小三角符号么?)最近几年里,他已成为 Java 和 XML 社区中最著名的作家和程序员之一。他曾在 Nextel Communications 从事复杂企业系统的实现;在 Lutris Technologies 进行实际应用服务器的编写;最近他在 O'Reilly Media, Inc. 继续编写和编辑相关书籍。Brett 即将完成的书 Head Rush Ajax 将为 Ajax 引入饱受赞誉的创新的 Head First 方法。他的上一本书 Java 1.5 Tiger: A Developer's Notebook 是第一本可获得的关于最新版本 Java 技术的书籍。而他的名著 Java and XML 仍然是在 Java 语言中使用 XML 技术的权威性著作之一。

简介: 除将 XML 用作一种简单数据格式之外,数据绑定是 XML 最流行的用法之一。即使刚刚入门的程序员也能在一种原生编程语言中使用 XML,并且在大多数情况下完全不需要任何的 XML 专门知识。本文并不是介绍解决方案,取而代之,Brett 介绍了一些讨论主题,鼓励您思考如何使用 XML 和数据绑定。欢迎在 XML 和 Java 技术讨论论坛上与别人一起分享您的想法。

查看本系列更多内容

平均分 5 星 共 2 个评分 平均分 (2个评分)
为本文评分

XML 用于业务而非技术

随着 XML 的日趋盛行,人们也越来越注重可用性。换句话说,程序员和管理者并不希望把 XML 看作是一项技术,拥有自己的语义和词汇结构,而认为它更像是纯粹的数据,访问时不用担心 XML 数据格式的细节。

完成 XML 从技术到业务格式的转换,最简单是方法就是数据绑定,这种说法还有待论证。数据绑定就是使用应用程序编程接口(Application Programming Interface,API)操作 XML 文档中的数据,这样程序员就不必过多地了解 XML,不必使用角括号,或者考虑 CDATA 部分或实体引用等等之类的事情。但即使是使用数据绑定,您也会发现在继续操作之前有大量的选项和重要问题需要仔细考虑。

出于本文讨论的目的,我将介绍两个与数据绑定相关的基本问题:

  1. 通过数据绑定 API 表示数据的方法。
  2. 当数据被视为业务数据时的用法。

表示 XML 数据

在最普通的情况下,数据绑定就是将 XML 文档中的数据转换成正在使用的编程语言中的对象。

用于数据绑定的基于对象的 API

比方说,查看下面这段 XML 代码:

<person>
 <firstName>Brett</firstName>
 <lastName>McLaughlin</lastName>
 <email>brett@newInstance.com</email>
</person>

我们可以将这段代码转换成对象,比方说在 Java™ 代码中,这是一个 Person 类的实例,拥有成员变量 firstNamelastNameemail。实例应该包含代码段中的数据,并且能通过方法调用访问该数据,例如 myPerson.getFirstName() 方法。

用于数据绑定的基于文档的 API

尽管这是最常见的数据绑定方法,但是使用 XML 文档并把整个文档表示成一个对象的 API 也是数据绑定的一种形式。这些 API 包括文档对象模型(Document Object Model,DOM)、JDOM 和 dom4j,所有这些 API 都用于在 Java 编码中创建 XML 文档的对象模型。

在这些模型中,我们使用 rootElement.getChild("firstName").getValue() 之类的调用(或者与之相似的调用,取决于 API 的细节)。虽然这确实需要一些 XML 的基础知识(理解元素是什么以及文档的基本结构),但还是对程序员抽象了解析的细节。这就是数据绑定的本质:能够更多地注意到数据而不是数据显示的格式。

程序员更轻松(有点)

一旦采用了更普通的数据绑定解决方案,如 Sun's JAXB,那么需要注意的底层 XML 语法将会更少。可以真正完全地使用 Java(或者您偏好的编程语言)对象、方法和变量。即使是元素的细节和文档结构也隐藏在了数据绑定处理创建的对象之下。

但是,此处的关键是(经常没有考虑到的)仍然需要将 XML 数据结构与系统中的对象匹配,或者需要在系统中创建匹配所使用的 XML 数据格式的对象。这两种情况到 XML 的映射都不太明显,但它仍然是处理的一部分。

那么是哪一种情况呢?

我在这里概述了两种基本的方法,但是这两种方法并不是像第一眼看上去那样区别很大。使用 DOM 或者 JDOM 之类的 API 时,不管是加载 XML 还是访问数据都需要不断地处理文档的结构。在第二种方法中,使用 JAXB 之类的 API 时,需要预先处理 XML,建立使用 XML 的对象模型(或者有时使用工具为您创建需要的类和对象)。然后,在运行时,将数据更多地作为业务数据来使用,可以不用考虑 XML 了。

如果 XML 不是非常易读的格式,或者并非如希望那样以业务目的分开,或者其格式会经常变化,则第一种方法将会是很好的选择。该方法需要更多一点的 XML 知识以及使用 API(更多地以技术为中心而不是以业务为中心)的能力。

另一方面,如果 XML 是按照业务需求组织的,并且 XML 结构很少变化,则可以一次性的创建类和对象,然后在运行时将数据作为业务数据使用,完全不用担心数据底层的 XML。


如何使用数据?

开发人员常常会疏于考虑:如何根据选择的数据绑定解决方案使用 XML 文档中的数据。但是,这可能是正确决定数据绑定方法的一个最重要的因素。

将对象用于持久数据

将 XML 数据转换成对象实例的数据绑定方法只适用于那些要多次使用的数据。获取 XML 文档中的数据并将其转换为多个对象中的成员变量数据涉及大量的处理工作。要从这个方法中获利,需要多次使用到该数据。

仔细查看一条数据的访问次数,同时也考虑一下使用了多少数据。比如说,假设 XML 中为每个人存储了 20 条数据,但应用程序中只访问了其中的一条,使用大量的资源转换数据却只是为了访问其中的一条。不论怎样计算这都不可能获利。

使用对象在其它组件中隐藏 XML

隐藏存储介质是使用基于对象的方法的另一个重要原因。因此应用程序中可能有一个组件对 Person 对象执行一些特殊的处理。可以从数据库或者 XML 文档或者属性文件中读取 people 数据,然后把这些数据转换成Person 对象,再把这些对象传递给处理组件。

即使只是暂时使用数据,这也是用对象表示数据的一种很合理的情形。在本例中,如果将数据表示为对象格式,并且应用程序的其它部分已了解如何使用该格式,则可以获益。同时还避免了组件的数据转化和数据加载,而您只希望使用某种类型的对象来实现相应操作,这很好地实现了应用程序中的关系隔离,而它正是应该遵循的一条重要的设计原则(应用程序中的每个组件只实现一个功能,并实现好该功能)。

短期,只使用一次的数据

如果没有要重用的数据,而且不以对象的形式将数据传递给应用程序中的另一个组件,则可以考虑使用 DOM 或者 JDOM 之类的 API。这比将 XML 转换成非文档格式所使用的资源少,从而可以全面受益。此方法比以高昂的代价将数据转化为特定于业务的对象、以后却只使用该数据一二次要好得多。

尽管本文的主题是数据绑定,但有一点值得提到的是在这些情况下甚至可以考虑使用 SAX(Simple API for XML)这样的 API,它完全不提供对象模型(以文档或对象格式)。使用它处理 XML 只使用很少的内存和时间,如果确实只需要使用一条数据一到两次,则此方法可让您获益巨大。使用像 SAX 这样的 API 需要更多的了解 XML 的知识,但了解这些知识是非常值得的。


结束语

这篇关于XML 和 Java 技术 的系列文章不是提供问题的解决方案,而是希望能让读者自己思考如何使用一种特殊的技术和 API —— 本例讨论了 XML 和数据绑定。您可能会同意其中的某些观点,而不同意另外一些观点。但是应该明确的是,一定要更深入地思考如何在自己的应用程序中使用 XML。

本文旨在为读者提供一个起点。欢迎访问 XML 和 Java 技术论坛,在那里将以更加互动的形式继续这些讨论。如何使用数据绑定,您最喜欢使用哪一种 API,是否想出了数据绑定技术在应用程序中的一些创造性用法?请与我分享这些信息……我期待在网上与您进行交流。


参考资料

学习

  • 您可以参阅本文在 developerWorks 全球网站上的 英文原文

  • 参阅本系列的第 1 部分,了解 XML 作为数据交换格式到底有哪些优势。

  • XML 技术文档库:访问 developerWorks XML 专区,获取大量的技术文章和技巧、教程、标准和 IBM 红皮书。

获得产品和技术

  • IBM 试用版软件:使用 IBM 试用版软件构建您的下一个开发项目,该软件可直接从 developerWorks 下载获得。

讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值