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

日期: 2008-01-10 作者:Brett McLaughlin 来源:TechTarget中国

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

  XML 用于业务而非技术

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

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

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

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

  表示 XML 数据

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

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

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

  <person>
   <firstName>Brett</firstName>
   <lastName>McLaughlin</lastName>
   <email>brett@newInstance.com</email>
  </person>
 
  我们可以将这段代码转换成对象,比方说在 Java™ 代码中,这是一个 Person 类的实例,拥有成员变量 firstName、lastName 和 email。实例应该包含代码段中的数据,并且能通过方法调用访问该数据,例如 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,是否想出了数据绑定技术在应用程序中的一些创造性用法?请与我分享这些信息……我期待在网上与您进行交流。

 

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • 数字化转型:如何更好地利用API和微服务

    API,即应用程序编程接口,它提供给应用程序、开发人员访问其它应用的能力,而又无需访问源码,无需理解内部工作机制细节;简单地说,API就是实现应用与应用连接的一种隐形的桥梁。

  • 金融行业数字转型:利用API构建新IT基础

    从制造业、物流业,银行业到零售业,各行各业的根基都因应用经济的兴起发生着深刻的变革。在互联网和智能手机普及化的推动下,这种现象变得司空见惯。到2021年 ,蓬勃发展的全球应用经济的预估总值将达到6.3万亿美元,相比2016年的1.3万亿美元,增长近5倍。

  • 如何使用Azure API管理服务?

    在云和微服务架构时代,API是数字化业务的通用语言。根据分析公司Forrester Research预测,仅在美国,API管理工具的支出将在未来5年内达到近30亿美元。

  • 私有存储云如何构建?

    如何构建自己的私有存储云呢?在这之前,我们要先退后一步,思考一下云计算到底意味着什么。