OXmlEd开发者指南1.1
简介
OXmlEd项目是一个“对象--XML映射”(Object-Xml Mapping)的类库。它的目的是帮助开发者方便、快速的从XML文件构建出Java对象,从Java对象生成出相应的XML文件。
OXmlEd是一个开源的项目,诞生于
在我的Blog上也会有相应的介绍文章。http://blog.csdn.net/shendl/
项目发起背景
OXmlEd项目的创意始自2007年1月份我做的一个项目。那个项目涉及到很多的xml操作。当时由于时间比较紧,我没有看现有的“对象—XML映射” Java类库,而是自己写了一套颇为精巧、复杂的类来实现。
但是自己写的那一套东西并不是通用的。当时做完那个项目,我就想着要去掉那些代码中特定领域的代码,实现一个通用的、简单的“对象—XML映射” Java类库。
另一个促使我写这个项目的原因,是从1月份的那个项目开始,我决定使用xml文件作为配置文件。而不再使用属性文件。因此我写了一个读取xml配置文件的类。这也是我设想中的OXmlEd项目的第一个用户。
但是后来一直忙,再加上我自己的懒惰,这个计划就一直没有付诸实施。
再后来,我曾经在OSDN上申请了一个项目,但最后还是决定不放在那里。因为它要求我必须选择一个我不知道的协议,我担心被人利用。再加上OSDN是国内的站点,而我觉得既然开源,就应该走国际化路线,应该上sourceforge这样的国外网站。虽然我英文不好,还是硬着头皮在sourceforge上申请了项目。
2007年8月初提出OXmlEd项目申请后,从
编码规范
OXmlEd项目的开发,遵循如下以下编码规范。
1,接口以I为前缀。
贯彻面向接口的设计理念。这是为了更好的重用和解耦。尽量设计接口和抽象基类。针对接口和抽象基类编程。
2,静态方法类以S为后缀。尽量避免使用静态方法类,而是使用一般的类(无状态类)来包含方法。因为静态方法无法实现接口,会造成代码的紧耦合,而且静态方法有面向过程开发的嫌疑。
3,服务类使用Service为后缀。
设计理念
整个项目贯彻面向对象的设计理念。
1,面向接口、基类编程。解耦、重用。
2,使用分层的设计方案。分层可以有效地实现解耦,可以简化系统的复杂度。
3,使用Visitor访问者模式减少类的职责。把数据和操作数据的方法分开到不同的类中,可以有效降低类的复杂度,有利于重用和解耦。
OXmlEd的核心思想
就是简单就是美!所以,它很简单,方便使用和理解。它的核心就是INode对象,这个递归的对象可以完美表示XML文件的数据。一切都是围绕它操作的。
当初设计它时和现在开发OXmlEd类库时,都没有花多少时间来编程。我希望它未来也不会变得太大。
我认为简单的逻辑,就应该由简单的代码来实现。
设计
系统结构图
OXml项目共有3种使用的方式,均可以实现java对象和XML文件的映射。
OXml项目的系统结构图如下:
用户编码实现业务对象和XML文件的映射
工作原理:
1,xml文件通过Dom4j等XML操作组件解析成Dom4j的一个对象Document。这是XML文件在java对象中的一个映射对象。它是与Dom4j类库紧密相关的,比较重量级的一个对象。
2,Document对象通过OXmlEd类库的IXmlUtil层,转化为INode对象。INode对象是轻量级的,与具体XML操作库无关的表示XML文件的对象。
3,INodeService和INode一起,实现把INode和XML文件映射的功能。
4,用户通过编码,实现具体的业务对象和XML文件的映射。
这是通过用户自己编码把自己的业务对象表示成INode形式的对象,并提供代码,把INode对象转换成自己的业务对象,从而实现业务对象和XML文件之间的映射。
我还推荐你使用ChangeListener 事件监听器,动态实现业务对象和INode对象之间的同步。
从上面OXmlEd类库的结构,我们可以看到,OXmlEd类库,提供了3个层次的操作和一种最佳实践的方式,让你可以灵活的处理Object-XML映射!
1,IXmlUtil层,这是在Dom4j之上的一个助手类层次,提供了强大的方法,帮助你使用Dom4j类库。另外修复了Dom4j的一个BUG。net.sf.oxmled.xml.util.dom4j.override. Dom4jXMLWriter这个类取代了有错误的Dom4j的XMLWriter类。
2,INodeService和INode层次,提供了一个轻巧、独立、完美的表示XML的java对象。调用这个层次上的方法,不依赖于任何XML操作类库。
3,用户根据自己的业务对象,创建2个方法,实现INode和你的业务对象之间的互相转化,可以实现任何业务对象到XML文件的映射。功能强大!
4,通过业务对象和INode对象的互相监听,能够实现业务对象和INode对象的永远同步。推荐使用ChangeListener事件监听器。
在业务类上标注,实现与XML文件的映射
用户编码实现业务对象和XML文件的映射这种方式,功能强大,但是需要一定的编码量,因此我们又提供了另一种简便的实现业务类和XML文件映射的手段。
INodeService和INode层次及以下层次完全相同。只是,我们在INodeService和INode层次之上没,又提供了一个层次:IOXmlMapping层次。
IOXmlMapping是一个服务方法,能够实现业务对象和xml文件的直接映射。
这里,要求业务对象使用XMLNode和XMLAttribute这2个标注,然后就可以使用IOXmlMapping的save和load这2种方法,实现业务对象和XML文件之间的直接映射!
请注意:
1,字段上的标注不能放在基类中,否则无法反射。
2,名为fullClassName的属性已经被占用,用来存放类名。你不能再使用这个名字的属性。
使用XML文件存储元数据,实现业务类和XML文件的映射
我们还可以使用单独的xml配置文件来存储元数据,实现Object-XML映射。但这种方式配置起来比较麻烦,因此我目前并没有实现。未来也可能不会实现!
未来的发展方向
OXmlEd项目未来可能的发展方向是:
1,可能会实现JAXB接口。
2,可能会考虑实现WebService的java类生成。就是根据WebService的xml文件,生成相应的类。