Speedframework--基于类型元数据的羽量级ORM
Yellowicq, 蜜蜂◎仔仔, 水瓶
1
2 引言
关系-对象映射框架(ORM)为解决关系数据库与OOP之间的阻抗问题(Resistance)提供了一个很好的解决方案,为系统开发提供很大的便利[11]. Hibernate, JDO, iBATIS等ORM框架在系统开发中已经得到了广泛应用[1] [2][7].但目前的ORM框架在项目实施过程中逐渐暴露出以下缺点[3]:
第一,不符合人类的抽象思维,ORM均是从业务操作对象(Business Object),业务信息对象(Domain Object),业务信息模型(XML描述文件)这三部分来建立系统.从业务对象关系表的直接映射模型使开发维护人员在维护之前必须对数据模型有充分的了解,增加了维护风险和成本.
第二,ORM通常提供面向对象的查询语言(ORM-QL)作为一种数据库与对象之间的过渡,虽然隐藏了数据层面的业务抽象,但并不能完全的屏蔽掉数据库层的设计,并且无疑将增加学习成本,同时使系统在不同语言间的迁移变得困难.
第三,在性能方面,由于复杂的映射和关联管理,ORM框架的引入对系统性能造成了较大的影响.
第四,ORM框架使用了大量的配置文件或注释(Annotation)来设置对象和关系的映射和对象导航图,并没有充分利用类型自身的元数据信息(metadata),给系统开发和维护带来了额外的成本.
综上,目前的ORM框架在解决对象关系之间阻抗问题的同时却带来了开发维护困难的新问题[12][16].而本文提出了一种完全基于类型元数据信息驱动的轻量级ORM框架—Speed[15],它使用约定规则彻底消除了目前ORM框架繁琐的配置文件,使用直接SQL推导代替ORM-QL以降低学习成本,同时使用更简洁的API进行数据库操作,较有效的解决了目前ORM框架所存在的上述问题,并且在实际项目Sphinx交互式CAI项目的实施过程中也取得了较好的效果[17].
3 Speed框架设计和核心算法
3.1 ORM框架在J2EE系统中的角色
目前的企业应用构架均采用多层结构,而ORM框架均在系统持久层(Persistence Layer)使用, ORM在系统中的角色如图1所示[3]:
�
�
Presentation Layer
ORM/框架/系统/对象/数据/开发/业务/维护/数据库/映射/
ORM/框架/系统/对象/数据/开发/业务/维护/数据库/映射/
-->