许多应用开发都需要与 XML 打交道,一种常见的做法是从 XML 入手:不是分析现有的 XML 格式,就是设计一个新的 XML 格式,然后使用 DOM、SAX 之类的解析器把 XML 转化为应用对象,这种做法当然可行,然而我认为存在以下几个缺点:
如果不是使用已定义的 XML 格式,就需要设计一个 XML schema ,这通常是一个繁琐的工作。
如果不想使用 Castor 之类的框架,解析 XML 也是一件麻烦的事情。
如果概念不清,由 XML 格式分析得到的对象模型会和 XML 有关联,这就使对象模型依赖于 XML 这个实现细节,变得难以重用。
对大部分应用来说,XML 应该是一种实现细节,应当尽可能地推迟考虑它,我们关注的中心应该是应用的对象模型。从对象模型出发,对于已定义好的 XML 格式,可以利用 Castor 等框架来相互转化;对于尚未定义的 XML 格式,可以利用 Xstream 之类的序列化框架来转化,这时你几乎不需要关心 XML 的格式,解析的工作当然也没有了。事实上,在这种情况下,是否需要使用 XML 格式就是一个问题,为什么不利用 Java 本身的序列化框架(Serialable) 来序列化为二进制格式呢?应该更简单。