对象与关系之间的矛盾:“阻抗失配”效应[转]

概述

 

“阻抗失配”这一词组通常用来描述面向对象应用向传统的关系数据库(RDBMS)存放数据时所遇到的数据表述不一致问题。C++程序员已经被这个问题困扰了好多年,而现在的Java程序员和其它面向对象开发人员也对这个问题深感头痛。

 

“阻抗失配”产生的原因是因为对象模型与关系模型之间缺乏固有的亲合力。“阻抗失配”所带来的问题包括:类的层次关系必须绑定为关系模式(将对象类映射为关系表),ID生成,并发访问以及下面提到的一些问题。

 

应用和数据存储方式的不一致是导致这些问题的主要原因。这个问题在很多方面已经变得十分明显,如:产品上市的周期,应用设计、开发和维护的费用,代码维护和扩展性,以及能够满足响应时间和性能需求的硬件配置和结构。在这些方面使用不同的数据存储方式所得到的结果将有很大的不同。

 

面向对象与关系数据库之间不一致所带来的必然结果——基于SQL的应用程序与面向对象数据库之间的不匹配效应越来越受到人们的关注,所以,对这个问题解决方法的探讨十分必要。

 

面向对象的开发语言

 

目前许多的业务逻辑和用户界面都是用很受欢迎的面向对象语言开发的,比如:C++,Visual Basic,Delphi,不断成熟的Java,以及很多开源程序语言。这些面向对象语言环境或多或少地实现了封装,多态,继承等概念。正确使用这些概念可以为整个开发带来相当大的好处。

 

 

在何处存放数据?

 

如果对数据的持久性有要求的话,面向对象语言和所有开发语言一样,都需要绑定数据存储器,一般情况下都采用数据库作为数据存储器。三种主要的数据模型是:关系型,对象型和后关系型亦即事务多维模型。

 

关系与对象数据库模型的根本区别

 

将关系数据库和对象数据库模型的不同点和两种不同模式的开发方法做个比较对应用开发人员十分有用。

 

关系模型中的表将信息保存在列中并以行的形式进行组织。复杂的数据类型往往需要很多的表来表示。表之间的关系(一对一,一对多,多对多)基于表的外键实现。

 

业务逻辑操作必须由表外的资源执行,例如:通过使用嵌入式SQL语句或者使用存储过程和触发器。为了建立关系模式的高效应用,开发人员必须对表,表间关系有相当深入的了解,而这些都是独立于业务逻辑组件之外的。

 

相反,对象模式中的类则是自包容(self-contained)实体。与关系表一样,它们包含信息(通过属性的方式)。但类与关系表一个很大的不同之处是相关数据(即嵌入式类和类集)可以存储在“容器”类中,而不是将这些相关数据分隔成独立的表,再使用外键重构它们之间的联系。

 

另外一个重要的不同点是,在对象模式中业务逻辑不是由外部的资源执行的。一个类中的方法就包含了对其类属性操作的代码。方法提供了调用这个类的接口,所以应用开发人员就不用顾虑使用关系模式所带来的复杂度了。

转自:http://tech.ccidnet.com/art/1105/20071122/1284297_1.html

你可能感兴趣的:(对象)