论文摘要
作为软件中描述数据的两种主流模型——对象模型和关系模型,具有不同的理论基础和模型特点。对象模型用对象来表示现实世界中的事物;利用对象模型,能够很好地描述和设计复杂的软件系统。这使得面向对象的设计方法在软件开发中大行其道,已经成为业务数据分析的基础,成为几乎所有应用开发的标准技术。但令人沮丧的是,与其同基于对象模型,理论上模式最相匹配的面向对象数据库却无法担任主流,大多数应用的存储还要在关系型数据库中实现。但是对象模型与关系模型对数据的描述方式是不同的:对象包含属性和行为,对象之间有继承、关联等关系,而关系数据库包含表、关系及表之间的关系使用主、外键表示等。这就突显出对象模型与关系模型的模式失配问题。在绝大多数的应用中,内存中暂时存在的对象需要永久的保存在关系数据库中,使得设计者要花费大量的精力解决对象型数据向关系型数据转化,并将数据存储在关系型数据库中的问题。实现在关系数据库存取对象,常用的做法有:第一种方法是SQL语句嵌入到应用代码即直接编写SQL代码来存取对象;第二种方法是将SQL代码在专门的数据类(或存储过程)中编写;实质是将执行SQL操作的源代码封装到了数据类中,是一种局部封装。但这两种方式都使得对象模型与关系数据库模式的耦合度大,不容易维护,因为无论是对象还是关系模式的微小改动,都将导致应用程序的重新编译。只适合小型应用系统或快速原型化。第三种,也是主流方法,即专门编制持久层实现对象和关系之间的映射,这种机制使应用程序的开发人员不需要了解关系数据库的模式,也不需要了解操作对象在数据库的存储方式就可以透明地操作存储在关系数据库中的数据,有利开发大规模的应用程序。但由于在设计体系中加入了持久层,势必造成效率方面的问题,使得在持久层的设计中不单单只是处理模式失配的问题,还要求有相应的机制解决效率等问题。持久层的设计要权衡诸如性能、读取频率、可扩展性、空间耗费、支持事务、游标、处理对象标识等,使持久层具有应用系统所要求的功能,并结合实际应用环境来权衡持久层的各种功能,满足最基本的、最满足应用环境的功能需求。持久层的映射要遵循一定的规则,不同的持久层所支持的映射规则是不相同的。但一般的ORM(Object Relation Mapping)都要支持类、属性、方法的映射、关系映射、继承的映射、数据完整性的映射等基本功能。本文对映射规则结合实例进行了深入分析,介绍了各种映射概念、方法,同时对实现同一目标的不同方法进行了横向的对比,有的还给出了使用原则。目前流行且非常成熟的J2EE是主流的创建企业级应用的平台,JDO是其轻量级的版本,但作为中间件也存在着诸如占用资源过多,依赖于XML的数据实体表示方式的特点;而微软的.NET出现的时间比较短,目前在这个平台上没有成熟统一的架构,本文描述和设计的便是基于微软的.NET的的中间件的架构,严格地说它不是狭义上的对象关系映射及持久化工具,因为它站在软件整体设计的视角以数据实体和数据访问作为核心实现目标,同时预留和简单实现了实体控制、业务规则等功能。本文提出的Netlight一种主要解决对象关系映射,数据库访问的中间件的架构,虽然是一种轻量级的、相对来说较简单的架构,但是它的架构基于分层,结构清晰,经过功能的强化,在添加更多的模块之后是可作为一个企业级的、具有较大的扩展性、耦合度较小的中间件框架。跟常用的框架的分层的区别在于对数据实体层进一步细分为数据实体和数据操纵层,使得业务逻辑层的代码更清晰,和数据实体层的耦合度进一步降低。Netlight分层设置为业务外观层、业务逻辑层、实体控制层、数据实体层和数据访问层的五层架构来封装不同数据库的连接访问、数据表示、数据的查询、插入、删除及修改等,以及业务的逻辑处理和业务服务的提供,使上层只需要调用下层封装过的操作,而不必关心其实现细节,各行各职,减少了系统和存储介质及各功能单位的相互耦合,使代码清晰度高,具有较高的可维护性,可使软件设计中的部分工作可以并行,提高了开发效率。关于Netlight的类结构,本文详细介绍并结合实例分析了系统的映射规则、数据库访问的封装、数据实体的表示、数据实体的控制、业务逻辑及业务服务的提供等等,列出了实现层次功能的关键类、常用方法以及类间的调用关系等。本文另一个特点是突破主流的面向对象的设计方法,提出了在中间件的设计中使用AOP(面向方面编程)设计方法,并通过对比其与面向对象方法处理相同业务逻辑时在降低系统耦合、使业务逻辑清晰化等的表现,说明了AOP的思想,并在Netlight中提出尝试使用AOP,以解决一些诸如身份权限检验,日志记录等经常被业务逻辑调用、和业务逻辑耦合但却属于整个系统的处理。解决了面向对象编程时有时存在的与业务逻辑紧耦合、不易扩展缺乏灵活性的缺点。但论文中实现的仅仅是一些中间件的一些较基础的功能,一些功能接口还有待填充和完善;对AOP的支持也只是处于设想阶段;作为一个理论上的框架,需要结合实际工程来检验系统的设计合理性,并结合实际不断的加以完善。