arm-linux

http://armboard.taobao.com/

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

                                                   OXmlEd开发者指南1.1

                                                 

简介

OXmlEd项目是一个“对象--XML映射”(Object-Xml Mapping)的类库。它的目的是帮助开发者方便、快速的从XML文件构建出Java对象,从Java对象生成出相应的XML文件。

OXmlEd是一个开源的项目,诞生于200789,由沈东良创建,项目地址:https://sourceforge.net/projects/oxmled/

在我的Blog上也会有相应的介绍文章。http://blog.csdn.net/shendl/

 

项目发起背景

OXmlEd项目的创意始自20071月份我做的一个项目。那个项目涉及到很多的xml操作。当时由于时间比较紧,我没有看现有的“对象—XML映射” Java类库,而是自己写了一套颇为精巧、复杂的类来实现。

但是自己写的那一套东西并不是通用的。当时做完那个项目,我就想着要去掉那些代码中特定领域的代码,实现一个通用的、简单的“对象—XML映射” Java类库。

另一个促使我写这个项目的原因,是从1月份的那个项目开始,我决定使用xml文件作为配置文件。而不再使用属性文件。因此我写了一个读取xml配置文件的类。这也是我设想中的OXmlEd项目的第一个用户。

但是后来一直忙,再加上我自己的懒惰,这个计划就一直没有付诸实施。

再后来,我曾经在OSDN上申请了一个项目,但最后还是决定不放在那里。因为它要求我必须选择一个我不知道的协议,我担心被人利用。再加上OSDN是国内的站点,而我觉得既然开源,就应该走国际化路线,应该上sourceforge这样的国外网站。虽然我英文不好,还是硬着头皮在sourceforge上申请了项目。

20078月初提出OXmlEd项目申请后,从86开始,我花了4天的时间开发了OXmlEd1.0版本。200789晚上,实现1.0版本的最后一个功能后,我发现OXmlEd项目已经批下来了,于是,我就连夜把OXmlEd1.0放到了https://sourceforge.net/projects/oxmled/ 上。

 

 

编码规范

OXmlEd项目的开发,遵循如下以下编码规范。

1,接口以I为前缀。

贯彻面向接口的设计理念。这是为了更好的重用和解耦。尽量设计接口和抽象基类。针对接口和抽象基类编程。

2,静态方法类以S为后缀。尽量避免使用静态方法类,而是使用一般的类(无状态类)来包含方法。因为静态方法无法实现接口,会造成代码的紧耦合,而且静态方法有面向过程开发的嫌疑。

3,服务类使用Service为后缀。

 

设计理念

    整个项目贯彻面向对象的设计理念。

1,面向接口、基类编程。解耦、重用。

2,使用分层的设计方案。分层可以有效地实现解耦,可以简化系统的复杂度。

3,使用Visitor访问者模式减少类的职责。把数据和操作数据的方法分开到不同的类中,可以有效降低类的复杂度,有利于重用和解耦。

 

OXmlEd的核心思想

就是简单就是美!所以,它很简单,方便使用和理解。它的核心就是INode对象,这个递归的对象可以完美表示XML文件的数据。一切都是围绕它操作的。

当初设计它时和现在开发OXmlEd类库时,都没有花多少时间来编程。我希望它未来也不会变得太大。

我认为简单的逻辑,就应该由简单的代码来实现。

 

设计

系统结构图

    OXml项目共有3种使用的方式,均可以实现java对象和XML文件的映射。

OXml项目的系统结构图如下:

用户编码实现业务对象和XML文件的映射

 

工作原理:

1,xml文件通过Dom4jXML操作组件解析成Dom4j的一个对象Document。这是XML文件在java对象中的一个映射对象。它是与Dom4j类库紧密相关的,比较重量级的一个对象。

2,Document对象通过OXmlEd类库的IXmlUtil层,转化为INode对象。INode对象是轻量级的,与具体XML操作库无关的表示XML文件的对象。

3,INodeServiceINode一起,实现把INodeXML文件映射的功能。

4,用户通过编码,实现具体的业务对象和XML文件的映射。

这是通过用户自己编码把自己的业务对象表示成INode形式的对象,并提供代码,把INode对象转换成自己的业务对象,从而实现业务对象和XML文件之间的映射。

我还推荐你使用ChangeListener 事件监听器,动态实现业务对象和INode对象之间的同步。

 

从上面OXmlEd类库的结构,我们可以看到,OXmlEd类库,提供了3个层次的操作和一种最佳实践的方式,让你可以灵活的处理Object-XML映射!

1,IXmlUtil层,这是在Dom4j之上的一个助手类层次,提供了强大的方法,帮助你使用Dom4j类库。另外修复了Dom4j的一个BUGnet.sf.oxmled.xml.util.dom4j.override. Dom4jXMLWriter这个类取代了有错误的Dom4jXMLWriter类。

2,INodeServiceINode层次,提供了一个轻巧、独立、完美的表示XMLjava对象。调用这个层次上的方法,不依赖于任何XML操作类库。

3,用户根据自己的业务对象,创建2个方法,实现INode和你的业务对象之间的互相转化,可以实现任何业务对象到XML文件的映射。功能强大!

4,通过业务对象和INode对象的互相监听,能够实现业务对象和INode对象的永远同步。推荐使用ChangeListener事件监听器。

 

在业务类上标注,实现与XML文件的映射

用户编码实现业务对象和XML文件的映射这种方式,功能强大,但是需要一定的编码量,因此我们又提供了另一种简便的实现业务类和XML文件映射的手段。

INodeServiceINode层次及以下层次完全相同。只是,我们在INodeServiceINode层次之上没,又提供了一个层次:IOXmlMapping层次。

IOXmlMapping是一个服务方法,能够实现业务对象和xml文件的直接映射。

这里,要求业务对象使用XMLNodeXMLAttribute2个标注,然后就可以使用IOXmlMappingsaveload2种方法,实现业务对象和XML文件之间的直接映射!

 

请注意:

1,字段上的标注不能放在基类中,否则无法反射。

2,名为fullClassName的属性已经被占用,用来存放类名。你不能再使用这个名字的属性。

 

 

使用XML文件存储元数据,实现业务类和XML文件的映射

    我们还可以使用单独的xml配置文件来存储元数据,实现Object-XML映射。但这种方式配置起来比较麻烦,因此我目前并没有实现。未来也可能不会实现!

 

 

 

未来的发展方向

OXmlEd项目未来可能的发展方向是:

1,可能会实现JAXB接口。

2,可能会考虑实现WebServicejava类生成。就是根据WebServicexml文件,生成相应的类。

 

 

 

posted on 2007-08-16 02:08  arm-linux  阅读(247)  评论(0编辑  收藏  举报