最终还是手工输出XML对象可靠
2005年 01月06日
和xml打交道,常常是哭笑不得:我为什么要花那么大力气和整个XML文档打交通呢?实实在在的,我只不过想存取其中一个对象的属性罢了!!前段时间了解了castor觉得这是一个解决方案,不过也还是需要整个文档的读写更新。一来是时间限制不允许当前深入研究,而且那也是一个不算成熟的项目;二来呢,采纳的话会和现在的digester读取模式发生冲突,有点划不过来。但是象科室设置的更新频率看来越来越高,再放到XML中只读靠手工改看来是不行的。因此打算把科室对象移植进数据库,但一动手就发现同样有不划算的地方。
事实上是发现忽视了一个问题,其实也是XML和关系数据库存储实质的一个对比内容:XML周边存取的手段的确不是非常成熟,但是它是以对象的层次结构存储数据的,而关系数据库则是平面形式地存储。我目前打算使用secion转为关系数据库,目的是为了可以分科室的更改设置更方便,这在XML是一个文件,而到了关系数据库,却是整个的一堆的关系表(关系概念中同样是一个实体,但此实体非彼实体,它意味着反应一个对象的一堆表),而且要与象表类等进行关联,相当复杂的。当前这也许不是一个好主意,而且,在大项目中使用复杂的关系结构表达数量不多的记录,似乎是一种成本效益比很低的过时的方法。所以,我犹豫了。
另一个办法是做一个可更新的xml模件:处理手法包括:
1、修改SectionBase,使它是针对多个科室的多个xml工作,而不是象现在那样一切解释把所有的科室读进去;
2、做一个更新各个科室的xml的方法;无论是casto的,还是其他什么方法的;
3、做一个更新各个科室的界面,把它连到科室管理台。
这里的关键是第二步。为确认第二步能够以当前最简单的方法完成,再次翻看先前下载的关于castor的文章,不过博客中国真是越来越弱不禁风,居然好久还动不了,过好长时间才把原来的文章打开再读一篇。研读结果仍是一样的,如果采用castor就意味着要采用它的JDO,而不仅仅是XML的输出,而目前我的读入主要是使用digester;所以这里包含着更大范围的修改,而且包含着更大不定性的试用;这也是我上两个星期暂时放开castor的原因:目前没有时间深入研究它的使用思想和实际应用。看来,只能采用原始点的SAX或甚至字符串处理了。
再考虑一下常用的sax/xalan/jaxp/jdom几种处理手法,如果不是单纯对着非对象化的文档内容工作,就是需要写一个XSLT/和转换器,而无论如何,要与一贯的JAVA对象/XML对象匹配的模式一起工作,还必须做到让上面的这些文档对象可以与digester后的JAVA对象互换的方法:没听说过!!从digester都没有几个人真的用过的情况下,我看就算上论坛问那几个国内国外的老兄都是白问。我想这种方法如果有,一定就在 Digester的具体使用中,从jdom中获得对象,以及重新转为document对象——不过,没有!!
看来,我要考虑一下自已实现的难道和可重用性是怎么样的。......一想下来,其实这也不是什么难事,只需要在每个类那里实现一个接口,比如说 write,然后逐级调用不就搞惦了么?何必舍近求远,找些不可靠的东西试用呢?一通百通,实际上手工输出对象字符串一点都不是一件恐怖的事,我是让那些文章作者给唬住了,关键就在于这是按对象输出,程序量并不算大,而且也是挺好管理的。相比写servlet输出,小意思啦。
原始的方法不见得就是落后的,合适就行!