当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

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

发表于: 2015-05-25   作者:come_for_dream   来源:转载   浏览:
摘要: 概述   “阻抗失配”这一词组通常用来描述面向对象应用向传统的关系数据库(RDBMS)存放数据时所遇到的数据表述不一致问题。C++程序员已经被这个问题困扰了好多年,而现在的Java程序员和其它面向对象开发人员也对这个问题深感头痛。   “阻抗失配”产生的原因是因为对象模型与关系模型之间缺乏固有的亲合力。“阻抗失配”所带来的问题包括:类的层次关系必须绑定为关系模式(将对象

概述

 

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

 

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

 

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

 

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

 

面向对象的开发语言

 

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

 

 

在何处存放数据?

 

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

 

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

 

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

 

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

 

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

 

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

 

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

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

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
板桥里人 http://www.jdon.com 2008/4/14(转载请保留) 在“面向对象建模与数据库建模两种分析设计
依赖:(Dependency)对象之间最弱的一种关联方式,是临时性的关联。代码中一般指由局部变量、函数参
目录 背景先谈谈类型之间的关系对象之间的关系为什么需要依赖和关联示例备注 背景返回目录 我们执着
<a href="http://img.it610.com/image/product/a50cd4b23305430ca7d7c63af0dd0429.jpg" targ
在开始之前先看看下图,对整个对象结构有个了解,再结合下面的详细介绍理解。 1.ProcessInstance 员
之前本人发过一篇关于程序员该如何规划自己的人生的文章(程序员该如何规划自己的人生 )在这文章中我
之前本人发过一篇关于程序员该如何规划自己的人生的文章(程序员该如何规划自己的人生 )在这文章中我
文件对象、文件系统设备、卷设备之间的关系简单说明 http://hi.baidu.com/jonathan2004/item/cb7fd9
9 矛盾
“鱼与熊掌”你选哪个?或许在自己的心中早已有了答案,或许还在为这件事彷徨?我就是后者、、、 面
bboss 序列化机制重大改进-支持复杂对象及对象之间关系序列化和恢复功能,支持对象循环引用/自引用
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号