基于代理的数据对象持久化方法及装置的制作方法

文档序号:6472561阅读:191来源:国知局
专利名称:基于代理的数据对象持久化方法及装置的制作方法
技术领域
本发明涉及数据持久化领域,具体涉及一种基于代理的数据对象持久化方法及装置。
技术背景在计算机系统中,将数据存储到外部存储介质的过程称为数据的持久化。持久化的数据 不会因系统掉电而丢失。需要长期保存的数据都需要进行持久化。持久化存储设备的容量比 计算机系统内存的容量要大得多,大量数据需要存储的时候也要使用持久化技术。数据持久化技术的内容非常丰富。现有的数据持久化技术的方式主要有两种关系式数 据库和文件。在这两种技术基础上,又派生出多种技术在关系式数据库基础上派生出对象 -关系映射技术,在文件基础上派生出可扩展标记语言(XML, Extensible Markup Language)技术等等。当前与本发明最相近的技术是对象-关系映射技术。对象-关系映射技术是基于结构化査 询语言(SQL, Structured Query Language)的一种数据持久化技术。它通过建立程序的对 象和关系式数据库表的映射,从而使得程序员能够以对象的方式访问数据库表,实现数据的 持久化操作。它是面向对象技术和结构化査询语言的混合体。使用对象-关系映射技术实现数据持久化的过程如下1、 根据对象定义,在数据库中创建表;2、 为程序的对象和数据库表建立映射关系;3、 根据需求编写类SQL语句,通过这些语句实现对持久化数据的操作;4、 在运行时,在写入操作中,对象-关系映射引擎把程序的对象转换为数据库表的行, 在读取操作中,把结果填充到程序的对象中。上述方案,要求编程人员必须有SQL知识,必须了解关系式数据的概念及其工作方式; 必须在设计对象类的时候考虑到如何映射到表;在把复杂的业务对象进行持久化的时候,一 般需要一个解耦合的过程。上述问题增加了变成人员的工作量,提高了编程门槛。另外,不 同软件厂商的对象-关系映射平台之间也存在差异,这增加了软件移植的工作量。发明内容本发明实施例提供一种基于代理的数据对象持久化的方法及装置,使得编程人员能够如 同访问内存中的数据对象一样方便地访问持久化的数据对象,从而简化持久化数据访问的编 程,屏蔽各种数据持久化底层技术的差异,增加应用系统的可移植性。本发明的基本思想是通过对数据对象的方法的代理,使得数据对象的使用者,只需要 定义数据对象的访问接口 ,就可以实现数据对象的持久化。本发明实施例提供的数据持久化方法,包括根据用户定义的接口,在运行时,生成接 口的代理对象;由代理对象代理对持久化对象的操作。其中,生成接口代理对象的步骤包括为每个需要访问的持久化的对象,根据其接口定义创建 代理对象;代理对象根据标识与持久化对象关联;对持久化对象的操作包括创建持久化对象、删除持久化对象、设置持久化对象内容、 读取持久化对象内容、对象命名。其中,创建持久化对象的步骤包括为对象生成唯一对象标识;根据接口定义和对象标识,在 持久化空间中创建持久化对象,在运行空间创建代理对象;删除持久化对象的步骤包括从持久化空间删除持久化对象;把代理对象标记为删除;设置持久化对象内容,对于固定复合类型的对象,如果属性值不是代理对象,则在持久 化空间中保存属性的值,否则,保存其标识。对于可变复合类型的对象,如果元素的值不是 代理对象,则在持久化空间中保存元素的值,否则,保存其标识。读取持久化对象内容,对于固定复合类型的对象,如果属性值不是代理类型,则直接把 持久化空间的属性值转换为运行空间的属性值对象,否则,为其创建一个代理对象;对于可 变复合类型的对象,如果元素值不是代理类型,则直接把持久化空间的元素值转换为运行空 间的属性值对象,否则,为其创建一个代理对象;对象命名,在持久化空间中建立一个一对一的字符串(名字)与对象标识的映射,通过 对此映射的插入、删除、修改和査询操作实现对象的命名、除名、重命名、根据名字取得对 象操作。本发明实施例提供的数据持久化装置包括 一个存储库单元、 一个以上的代理对象单元 、 一个以上的适配器单元;其中,存储库单元,用于缓存数据、创建代理对象、删除对象;代理对象单元,即数据接口的代理对象单元,用户通过对代理对象的操作,实现对持久 化数据的操作;对于固定复合类型的接口,代理其属性的读取、修改;对于可变复合类型的 接口,代理其元素的增加、删除、査找、修改;适配器单元,用于把根据适配器接口来的操作转换为对具体的持久化底层平台的操作; 所有的适配器单元,使用统一的适配器接口,从而屏蔽各种持久化底层平台的差异。 从以上技术方案可以看出,本发明实施例具有以下优点使编程人员以与访问内存数据对象一样方便地访问持久化数据对象,提高了编程人员的 工作效率。降低了编程人员的技术门槛。例如,程序员不需要学习数据库技术就可以把数据持久化 到数据库中。屏蔽了各种持久化平台之间的差异,增加了应用系统的可移植性。


图l为本发明装置的组成结构图; 图2为本发明创建持久化对象的流程图; 图3为本发明修改持久化对象内容的流程图; 图4为本发明获取持久化对象内容的流程图;具体实施方式
本发明实施例提供一种基于代理的数据对象持久化方法及装置,以简化持久化数据访 问的编程,屏蔽各种底层数据持久化技术的差异,增加应用系统的可移植性。所谓代理(proxy),就是用一个中介来封装一系列的对象交互,从而使各对象不需要 显式地相互引用,使其耦合松散,而且可以独立地改变它们之间的交互。代理涉及到三个部 分抽象角色、代理对象、目标对象,其中,抽象角色声明真实对象和代理对象的共同接口。代理对象,代理对象内部含有对目标对象的引用,从而可以操作目标对象,同时代理对 象提供与目标对象相同的接口以代替目标对象。此外,代理对象可以在执行对目标对象的操 作时,附加其他的操作,相当于对目标对象进行封装。目标对象,代理对象所代表的对象,是被最终要引用的对象。请参阅图l,本发明实施例提供的数据持久化装置包括储存库单元101、代理对象单元 102、适配器单元103,其中,储存库单元101,是一个用于对数据对象进行创建、删除、命名等操作的模块,它是用 来根据接口生成代理对象的工厂(factory);在储存库单元中,还维护了一个以对象标识为索引的当前代理对象的列表,用于防止重复创建代理对象;代理对象单元102,是用户定义的数据接口104的代理对象单元,用户通过对代理对象的 操作,实现对持久化数据的操作;代理对象单元102可以代理固定复合类型和可变复合类型 的接口;对于固定复合类型的接口,代理其属性的读取、修改;对于可变复合类型的接口, 代理其元素的增加、删除、査找、修改;适配器单元103,把对持久化平台的抽象访问转换成对具体的持久化平台的访问, 一般 情况下,每种持久化平台需要一种适配器。另外,数据接口104,是编程人员根据所开发的应用软件的需求而定义的访问数据的接口;持久化对象105,是根据数据接口104,由本发明实施例提供的数据持久化装置在持久化 空间107中生成的数据对象。本发明实施例提供的数据持久化装置中,抽象角色即是用户定义的数据接口104,代理 对象即代理对象单元102,目标对象即持久化对象105。下面对本发明的数据对象持久化方法进行描述。本发明实施例提供的数据持久化方法,主要步骤是根据用户定义的接口,在运行时, 生成接口的代理对象;由代理对象代理对持久化对象的操作。 生成接口代理对象生成接口代理对象的具体步骤包括为每个需要访问的持久化对象,根据其接口定义创 建代理对象;代理对象根据标识与持久化对象关联。每个在应用程序中需要进行持久化操作的对象,在应用程序的运行空间中都有一个代理 对象。代理对象是在运行空间按需创建的,不需要为所有的持久化对象创建代理对象。代理 对象是由储存库单元根据编程人员定义的数据接口在运行时动态创建的,在程序运行结束后 代理对象消失,而其对应的持久化对象则在持久化空间长久保存。数据持久化操作包括创建持久化对象、删除持久化对象、设置持久化对象内容、读取 持久化对象内容、对象命名。下面对其分别具体叙述。 创建持久化对象请参阅图2,创建对象的具体步骤为根据接口取得对象的定义201,如果是固定复合类型接口,则根据其所有属性的名称和 类型以定义持久化对象;如果是可变复合类型,则根据其元素类型以定义持久化对象;为对象创建唯一的标识202,每个对象在持久化中都有一个全局的唯一对象标识,根据这个标识可以唯一确定一个对象;在持久化空间中创建持久化对象203,根据步骤201所取得的对象的定义和步骤202创建 的对象标识,在持久化中为此对象分配存储空间,此存储空间可根据其标识访问到;创建接口的代理对象204,在应用程序运行空间中,为此接口创建一个代理对象,代理 对象本身并不保存数据,而是把对其访问,转换为对持久化中的数据的访问。 删除持久化对象删除持久化对象过程就是从持久化空间中删除所存储的对象,并释放其存储空间。其具 体步骤为从持久化空间删除持久化对象; 把代理对象标记为删除。设置持久化对象内容 请参阅图3,设置持久化对象内容的过程具体为 应用程序调用设置对象内容方法301;根据被调用的方法得到内容的标识302,这里所说的内容的标识是指固定复合类型对象 的属性的名称或者可变复合类型对象的元素的下标;判断,被设置的值是否是代理对象303,对象内容的值可以是代理对象,也可以不是代 理对象;如果是代理对象,贝!」,把值对象的标识存储到持久化对象中304,在持久化空间中,这 个值就是这个代理对象的标识;如果不是代理对象,贝!」,把值对象转换为可保存的形式存储到持久化对象中305,例如 日期型数据,可以被转换为字符串格式或者长整数格式进行保存。 读取持久化对象内容读取持久化对象内容,即读取固定复合类型的属性或者可变复合类型的元素。对象的内 容可以是代理对象,也可以不是代理对象,例如一个整数。 请参阅图4,读取对象属性的具体步骤为应用程序调用内容读取方法401 ,即应用程序调用固定复合类型对象的属性读取方法或 者可变复合类型对象的元素读取方法;根据被调用的方法得到所要读取的内容的标识402 ,这里所说的内容的标识是指属性的 名称或者元素的下标;在持久化中得到对象内容的值403,这个值可以是代理对象的标识,也可以是非代理对象的值;判断值是否是代理对象的标识404;如果是,根据标识得到代理对象并返回给调用者406,具体过程为根据对象的标识, 从储存库单元的代理对象列表中査看是否已经为持久化对象创建了代理对象,如果已经创建 ,则直接从储存库中根据对象标识取得代理对象;如果没有创建,则创建一个代理对象,并 将此代理对象加入到储存库单元的代理对象列表中;如果不是,那么,把此值转换为相应类型的对象并返回给调用者405,这种转换与底层 持久化平台密切相关,对每种基本类型都有各自的转换方法。 对象命名在运行空间,通过对象间的引用关系,可以从一个对象取得另一个对象。对于没有引用 关系的对象,通过把一个对象与一个字符串(名字)相关联,从而可以根据这个字符串从持 久化空间中取出这个对象。对象命名的机制是,在持久化空间中建立一个一对一的字符串(名字)与对象标识的映 射,通过对此映射的插入、删除、修改和査询操作实现对象的命名、除名、重命名、根据名 字取得对象操作。 应用示例下面是本发明的一个Java语言上的应用示例首先,编程人员根据程序的需要,以源代码的形式定义数据对象的接口。例如用户定 义如下的两个需要持久化的数据的接口D印artment和Employee,代码如下 public interface Department {public String getNameO;public void setName(String name);public Collection〈Employee> getEmps();public void setEmps(Collection〈Employee> emps);public interface Employee { public String getNameO; public void setName(String name); public float getSalaryO; public void setSalary(float salary);数据对象的属性可以是基本类型也可以是代理的类型,上述代码中D印artment接口的 name属性是一个不是代理对象,Emps属性是一个代理对象,是Employee类型对象的集合。 下面是其应用示例 对数据进行持久化时Repository r印os = new Repository (….);Employee zhang = r印os. create (Employee, class);zhang. setName (〃张三〃);zhang. setSalary (3000);Employee li = r印os. create (Employee, class); li. setName (〃李四〃); li. setSalary(4000);Employee wang = r印os. create (Employee, class); wang. setName (〃王五〃); wang. setSalary (5000);Collection〈Employee〉 emps = r印os. createCollection0 ; emps. add (zhang); emps. add(li); emps. add(wang);Department d印t = r印os. create (Department, class);d印t. setName (〃技术咅IT);dept. setEmps(emps);r印os. giveName (d印t, 〃tech d印t〃);读取持久化的数据Repository r印os = new Repository (….);Department dept2= (Department) r印os. findByName (〃tech d印t〃); for (Employee emp: d印t2. getEmps ()) {System, out. println (emp. getName()+〃, salary :〃+emp. getSalary ());从上述示例可以看出,在代码中完全屏蔽了底层持久化操作,和访问应用程序空间的对 象一样访问持久化对象。而且不需要额外的代码生成或者编译步骤,从而降低了编程的复杂 度,提高软件开发效率。上述实施例说明了一种基于代理的数据对象持久化方法及装置。以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
权利要求
1.一种基于代理的数据对象持久化方法,其特征在于,包括根据用户定义的接口,在运行时,生成接口的代理对象;由代理对象代理对持久化对象的操作。
2.根据权利要求l所述的数据对象持久化方法,其特征在于,所述生 成接口的代理对象的步骤包括为每个需要访问的持久化的对象,根据其接口定义创建代理对象; 代理对象根据标识与持久化对象关联。
3.根据权利要求l所述的数据对象持久化方法,其特征在于,所述对 持久化对象的操作包括创建持久化对象、删除持久化对象、设置持久化对象内容、读取持久化对象内容、对 象命名。
4.根据权利要求3所述的数据对象持久化方法,其特征在于,所述创 建持久化对象的步骤包括为对象生成唯一对象标识;根据接口定义和对象标识,在持久化空间中创建持久化对象,在运行空间创建代理对象。
5.根据权利要求3所述的数据对象持久化方法,其特征在于,所述删 除持久化对象的步骤包括从持久化空间删除持久化对象; 把代理对象标记为删除。
6.根据权利要求3所述的数据对象持久化方法,其特征在于,所述设 置持久化对象内容,其特征在于对于固定复合类型的对象,如果属性值不是代理对象,则在持久化空间中保存属性的 值,否则,保存其对象标识对于可变复合类型的对象,如果元素的值不是代理对象,则在持久化空间中保存元素 的值,否则,保存其对象标识。
7.根据权利要求3所述的数据对象持久化方法,其特征在于,所述读 取持久化对象内容,其特征在于对于固定复合类型的对象,如果属性值不是代理类型,则直接把持久化空间的属性值转换为运行空间的属性值对象,否则,为其创建一个代理对象;对于可变复合类型的对象,如果元素值不是代理类型,则直接把持久化空间的元素值 转换为运行空间的属性值对象,否则,为其创建一个代理对象。
8.根据权利要求3所述的数据对象持久化方法,其特征在于,所述对 象命名其特征在于在持久化空间中建立一个一对一的字符串(名字)与对象标识的映射,通过对此映射 的插入、删除、修改和査询操作实现对象的命名、除名、重命名、根据名字取得对象操作。
9. 一种数据对象持久化装置,其特征在于,包括 一个存储库单元,用于缓存数据、创建代理对象、删除对象; 一个以上的代理对象单元,用于代理应用程序对持久化对象的操作;一个以上适配器单元,用于把根据适配器接口来的操作转换为对具体的持久化底层平 台的操作。
10.根据权利要求9所述的数据对象持久化装置,其特征在于,所述 代理对象单元,每个代理对象都通过唯一的对象标识与持久化的数据对象关联; 对于固定复合类型的接口,代理对其属性的读取、修改; 对于可变复合类型的接口,代理对其元素的增加、删除、査找、修改。
11.根据权利要求9所述的数据对象持久化装置,其特征在于,所述 适配器单元,所有的适配器单元使用统一的适配器接口,从而屏蔽各种持久化底层平台的差巳升。
全文摘要
本发明公开了一种基于代理的数据对象持久化方法及装置。所述方法包括根据用户定义的接口,在运行时,生成接口的代理对象;通过对代理对象的操作,实现对持久化对象的操作。所述装置包括存储库单元、代理对象单元、适配器单元;所述存储库单元,用于缓存数据、创建代理对象、删除对象;所述代理对象单元,用于代理应用程序对持久化对象的操作;所述适配器单元,用于把根据适配器接口来的操作转换为对具体的持久化底层平台的操作。本发明可以简化数据对象持久化操作,提高编程效率。
文档编号G06F9/44GK101403971SQ200810304398
公开日2009年4月8日 申请日期2008年9月5日 优先权日2008年9月5日
发明者李永武 申请人:李永武
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1