关于对象持久类框架的构架设计(Part1)

原创 2003年05月23日 11:38:00

关于对象持久类框架的构架设计

用语定义:

1.         世界:在本文中世界定义为系统范围内的所有,包括数据库、数据库记录、对象实例、对象等(名词)

2.         类:是定义一组相似对象的共同特征标准集合,表现为数据结构(属性与关系)与行为(操作与)。(名词)

3.         对象:一个通过状态与行为区别于其他实体的实体,其封装了状态与行为,状态表现为关系与属性,行为则通过操作与方法来体现。对象是一个类的概念上的实体(也就是现实存在的类)。(名词)

4.         对象元数据:描述对象属性的数据组,它包含的了对象数据的状态以及位于持久机制上的状态。在本文中指的是一组数据可以表示对象的属性(名词)

5.         属性对象:作为一个对象的属性而存在的对象(名词)

6.         对象集:一组同一类的对象。(名词)

7.         实例:在内存中存在的一个具体的对象。(名词)

8.         实例集:一组对象的实例。(名词)

9.         数据库记录:在数据库中储存的具体对象(也就是对象属性与关系)以及对象集。为一条记录或包括一组记录(来记录关系对应)(名词)

10.     实例化:创建一个对象并设置其属性与关系(通过数据库记录或其他方式)。(动词)

11.     对象存贮:将对象的属性与关系映射为数据库记录的操作。(动词,名词)

12.     对象引用:若可以通过一项或几项对象属性的具体特征,在一组对象中得到一个具体的对象(并不一定是实例),则称这一项或几项对象属性的特征为对象引用。(名词)

13.     程序:本文中的程序特指Borland公司的Delphi Object Pascal语言所编制的程序,也许在文中有其他的语言出现,我将会特别指明。

框架的构想:

需要建立一个持久框架以完成对象以及其与其它对象的关系的保存获取,主要针对关系型数据库,目的是使对象独立于数据库以及数据存取机制,简化面向对象程序的编写,使得对象的设计、实现得以一致化。

根据The Design of a Robust Persistence Layer For Relational Databases[i]以及Implementing Business Objects[ii]Persistence Brings Success[iii]、《Rolling your own Object Persistence Framework[iv] 这些文章的表述我们知道应该分离对象本身以及其持久化机制,可以保持灵活性。因此我们可以锁定四个问题域:对象、对象元数据以及持久化和映射机制。(关于上述文章描述的持久化系统的讨论我将在后面进行)

 

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />CSDN_Dev_Image_2003-5-231058360.wmz

对象

为了建立持久对象框架,我们必须对对象应具有的通用属性以及操作做出统一的规划,也就是定义对象类的属性与操作:

l         对象应具有一个唯一的(针对世界而言)标识(ID);由于数据库的不同ID的表表现方式也不一致,可能是字符也可能是数字

l         对象可以通过统一的Getter/Setter机制,得到其属性;在其他语言中也许有动态映射(反射机制)的实现,但在Delphi中没有,我认为使用反射机制可能会损失系统设计的一致性。

l         对象可以通过对其自己的元数据对象操作以保存,载入,以及从世界中删除。

l         对象具有如下的状态:新创建(New,空载入(NULL Loading),元数据载入(Metadata Loading,持久载入(Persistence Loading,操作中(Operating,元数据保存 (Metadata Save),持久保存(Persistence Save),元数据修改(Modify Metadata),持久修改(Modify Persistence)。

对象的元数据

对象的元数据可以分离对象的数据实例与对象实例,可以在内存中对于数据本身作映射,同时也可以通过数据构建对象。它是实现灵活的对象持久机制的关键。

对象的元数据需要:

以一个通用的形式描述对象的属性以及数据。

可以以列表的形式描述对象组的属性以及数据。

保存类的信息

根据属性数据构造对象(也就需要保存类的信息)

持久化

持久化分为:对象的属性到持久机制的映射以及对象关系到持久机制的映射。

持久化应该可以:

1.         提供对应多种的映射机制,可以对于文本、关系数据库进行持久操作。

2.         完整的封装持久机制,对象只需要对持久化对象发送SaveRetrieveDelete等消息就可以完成自身的保存、获取、删除等工作。

3.         针对条件进行对象的操作。

4.         提供一个关系处理机制来处理对象间关系的持久化。

5.         提供事务支持,由于对于属性,持久化需要:保持对象属性的数据完整,进行对象属性的原数据保护;同步实例的属性与数据库中的属性值(世界中的多任务并发操作)。

6.         妥善处理实例与世界中其他实例(也许不在同一台机器上)的一致性。

映射机制

 


[i] Scott W. Ambler,(November 28, 2000),《The Design of a Robust Persistence Layer For Relational Databases》,http://www.ambysoft.com/persistenceLayer.pdf

[ii] Philip Brown,《Implementing Business Objects》,news://news.Borland.com

[iii] Joanna Carter,Persistence Brings Success

[iv] Peter Hinrichsen2001,《Rolling your own Object Persistence Framework》,BorCon Asia Pacific 2001

关于对象持久类框架的构架设计

用语定义:1.         世界:在本文中世界定义为系统范围内的所有,包括数据库、数据库记录、对象实例、对象等(名词2.         类:是定义一组相似对象的共同特征标准集合,表现为数据结构(...
  • yangdelong
  • yangdelong
  • 2007年04月18日 09:16
  • 664

Qt学习笔记(1)­——Qt对象数据成员的存储

今天在网上看了一篇博客,关于Qt的底层机制的,做Qt开发不久,原来也就是一直调用上层的做做界面。觉得Qt对象的数据成员的储存的方式,思想还是很值得借鉴。首先,Qt的数据成员不是像我们一般的那样:每个都...
  • Huang850615
  • Huang850615
  • 2010年06月04日 17:17
  • 2201

持久框架对象

(1)PO:persistant object 持久对象。与数据库中的表相映射的java对象。最简单的PO对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中不包含任何对数据库的操作。 ...
  • kaixinbingju
  • kaixinbingju
  • 2012年08月29日 11:02
  • 1152

持久对象的生命周期(瞬时态、持久态、脱管态)

在Hibernate中,持久化对象在操作过程中可以分为三个时期,这三个时期是与Session的周期相关的,因为Hibernate中的操作都是基于Session完成的。所以Session对象的生命周期也...
  • qq_22854537
  • qq_22854537
  • 2016年06月06日 15:25
  • 807

【ci框架】CI超级对象

目录结构说明 license.txt 许可协议 user_guide  用户手册 system      框架核心文件 application 应用目录 index.php   入口文件 ...
  • yanhui_wei
  • yanhui_wei
  • 2014年04月17日 14:10
  • 3461

Hibernate学习-11:持久化对象状态及状态转换、持久态对象自动更新数据库

持久化类:就是一个实体类 与 数据库表建立了映射. Hibernate为了方便管理持久化类,将持久化类分成了三种状态. 瞬时态 transient  :(临时态)特点:持久化对象没有唯一标识OID...
  • Dove_Knowledge
  • Dove_Knowledge
  • 2017年04月20日 17:01
  • 661

【SSH框架】--Hibernate持久化对象的三种状态

Hibernate是一个开放源代码的对象映射框架,对JDBC进行了非常轻量级的对象封装。持久化是将程序数据在持久状态和瞬时状态间转换的机制。持久化(Persistence),即把数据(如内存中的对象)...
  • u010785685
  • u010785685
  • 2016年02月12日 20:11
  • 1052

Hibernate中的对象有三种状态: 瞬时状态 (Transient),持久状态 (Persistent),

Hibernate中的对象有三种状态: 瞬时状态 (Transient),持久状态 (Persistent),      1. 瞬时状态 (Transient) 当我们...
  • fanqiezz11
  • fanqiezz11
  • 2014年10月29日 10:36
  • 746

hibernate中对象的3种状态 瞬时态、持久态、脱管态

Hibernate的对象有3种状态,分别为:瞬时态(Transient)、 持久态(Persistent)、脱管态(Detached)。处于持久态的对象也称为PO(Persistence Object...
  • jxq0816
  • jxq0816
  • 2014年01月03日 17:02
  • 2698

Hibernate的游离态与持久态转换

在Hibernate中,一个PO可能经过长时间的操作,session已过时关闭,此时PO已经是一个游离态的对象,这时要转换为持久战态,有以下几种方法:1、session.saveOrUpdate(ob...
  • sdbany
  • sdbany
  • 2008年04月07日 17:00
  • 4970
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于对象持久类框架的构架设计(Part1)
举报原因:
原因补充:

(最多只允许输入30个字)