对象持久化常用方法研究

合集下载

面向对象的软件生命周期管理方法研究

面向对象的软件生命周期管理方法研究

面向对象的软件生命周期管理方法研究随着信息技术的飞速发展,软件开发已成为现代经济的重要组成部分,如何进行高质量的软件开发成为了广大软件人员面临的重大挑战。

面向对象的软件生命周期管理方法,就是一种根据面向对象编程思想,针对软件开发过程中的需求、设计、编码、测试、维护等环节,采用一整套完善的管理方法体系,从而提高软件开发过程中的效率和质量的方法。

本篇文章将简要介绍面向对象的软件生命周期管理方法,并讨论其在现代软件开发中的重要性。

一、面向对象编程思想介绍首先,我们需要对面向对象编程 (Object-Oriented Programming,简称OOP) 进行简要介绍,以便更好地理解面向对象的生命周期管理方法。

OOP 是一种流行的编程风格和思想,它主要基于“对象”的概念,将数据和操作数据的形式化合二为一,这样可以使得代码更易于理解和维护。

OOP 是一种软件开发的范型,具有封装、继承和多态等三大特征。

二、面向对象的软件生命周期管理方法介绍面向对象的软件生命周期管理方法是一种完整的开发过程管理方法,主要包括需求分析、设计、编码、测试、维护等环节。

这些环节需要采用不同的方法和工具,同时还需要特殊的管理策略来确保软件开发过程的顺利进行。

下面将对每个环节进行简要介绍。

1. 需求分析需求分析是软件开发过程的基础,它主要负责搜集和分析用户的需求,明确软件开发目标和范围,制定好软件需求规格说明书,并对用户需求进行及时评审和修改。

2. 设计设计是软件开发过程的核心,其目标是确定软件的架构、模块和界面等结构,为编码和测试奠定基础。

设计需要采用多种设计模式,如 MVC、Observer、Factory、Abstract Factory 等。

3. 编码编码即是实现设计的具体过程,它需要编写高效、模块化、可读性高的代码,以实现相应的功能。

在编码过程中,需要遵循代码规范、版本控制和重构等一系列技术。

4. 测试测试是审查软件系统是否满足需求规格说明书中的要求,并找出其中的缺陷和错误。

Java对象持久化方法研究

Java对象持久化方法研究

S QL语 句 是 面 向关 系 的 , 赖 于关 系 数 据 模 型 , 依
使 开 发人员 不 能完全 运用 面 向对 象的思 想来 设计 程 序 为 了把 数据 访 问细 节 和 业务 逻辑 完 全 分 开 ,
收 稿 日期 :0 50— 6 2 0 —91
储持久数据 。J O不是一个轻量级封装 , D 其标准 很 不完善 。 了能 够在竞 争 中脱颖 而 出 , 个 厂, 文章对Hient 的基本原理进行 了深入 的探讨 最后通过 一个实 brae 例说明如何利用 Hien t b rae进行对象 的持久化操作 。
关键词 Jv brae 对 象 持 久 化 ; 象 / 系 映 射 aa Hien t; 对 关
文献标识码 : A 中 图 分 类 号 : P 1J T 3 2A
AbtatHien t ia p ns uc bet essigto a ss R mapn pte src: br ae s no e -o re jc p rit lh t e p igt ma o n o t u O/ o h Jv betnoterl in l aa ae hsat l ma e h ru ha a s fh aip ic l aao j t h e t a d tb s.T i rie d too g n l io eb s r i e ci ao c a ys t c n p
程 序 结构不 清 晰 , 当关系 数据模 型 发生 变化 时 , 则 必 须 修 改 程 序 代 码 中 的所 有 相 关 的 S 语 句 。 QI
关 系 映射 元 素据 各 不 相 同 , E B不 能从 一 个 使 J
E B容 器顺 利地 移植 到另 一个 E B容器 中 。 J J

如何在Java中进行数据的持久化和读取操作

如何在Java中进行数据的持久化和读取操作

如何在Java中进行数据的持久化和读取操作数据的持久化是指将程序中的数据存储在持久存储介质中(如文件、数据库等)以便下次程序运行时能够重新读取和使用。

在Java中,数据的持久化和读取操作可以通过文件操作、数据库操作、序列化和反序列化等方式实现。

本文将重点介绍在Java中进行数据的持久化和读取操作的几种方法。

一、文件操作1.1文件写入在Java中进行文件数据的持久化操作可以使用FileOutputStream 或者BufferedWriter等类来实现。

通过FileOutputStream类,可以将数据以字节的形式写入文件,示例代码如下:```javatry {String data = "Hello, World!";FileOutputStream fos = new FileOutputStream("data.txt");fos.write(data.getBytes());fos.close();} catch (IOException e) {e.printStackTrace();}```上述代码中,首先定义了一个字符串数据并赋值给data变量,然后通过FileOutputStream类打开文件输出流,并将字符串数据以字节形式写入文件中,最后关闭文件输出流。

1.2文件读取使用FileInputStream或者BufferedReader类可以实现对文件数据的读取操作。

示例代码如下:```javatry {FileInputStream fis = new FileInputStream("data.txt");int content;while ((content = fis.read()) != -1) {System.out.print((char) content);}fis.close();} catch (IOException e) {e.printStackTrace();}```上述代码中,首先使用FileInputStream类打开文件输入流,并定义一个整型变量content用于存储读取的字节数据。

Docker容器中的数据持久化与存储方案

Docker容器中的数据持久化与存储方案

Docker容器中的数据持久化与存储方案随着云计算和容器化技术的发展,Docker已成为当下最流行的容器技术之一。

它的快速部署和轻量级的特性使得开发者能够高效地构建、测试和部署应用程序。

然而,Docker容器默认的文件系统是临时性的,当容器被删除时,容器中的数据也会丢失。

为了解决这个问题,数据持久化与存储方案变得至关重要。

本文将介绍几种常用的Docker容器中的数据持久化与存储方案。

1. 数据卷(Volume)数据卷是一种特殊的目录,它绕过了容器的文件系统,直接与主机操作系统进行交互。

通过将数据卷挂载到容器内的目录,可以实现数据的持久化存储。

数据卷的好处在于可以被容器之间共享和重新使用,同时在容器删除后数据卷中的数据依然存在。

使用数据卷的方法简单,只需在创建容器时使用"-v"参数指定数据卷的位置即可。

2. 挂载主机目录除了使用数据卷,Docker还允许直接将主机上的目录挂载到容器内,实现数据的持久化存储。

这种方式适用于需要将数据存储在主机上的场景,比如数据库文件以及其他持久化的配置文件。

通过在创建容器时使用"-v"参数指定主机目录和容器目录的映射关系,容器内的数据变化将同步到主机上的相应目录中。

3. Docker数据卷容器数据卷容器是一种专门用来提供数据卷的容器。

这种方案中,首先创建一个数据卷容器,并将数据卷挂载到该容器内。

然后,在创建其他容器时,可以通过"--volumes-from"参数将数据卷容器中的数据卷挂载到新容器内。

这种方式可以更好地组织和管理数据卷,使它们与具体的应用容器解耦,提高了容器的可维护性。

4. 存储驱动Docker支持多种存储驱动,用于控制容器的文件系统如何存储和访问数据。

不同的存储驱动适用于不同的场景,包括本地存储、网络存储和分布式存储等。

通过选择适合的存储驱动,可以根据具体需求来决定数据存储的方式。

5. 第三方存储解决方案除了上述的原生解决方案,还有一些第三方存储解决方案可供选择。

基于ORM的轻量级数据持久化技术研究及应用

基于ORM的轻量级数据持久化技术研究及应用
还 提 供 数 据 查 询 和获 取 数 据 的 方 法 , 以大 幅 度 减 少 开 发 时 可 人 工使 用 S QL和 J B D C处 理 数 据 的 时 间 , 只 对 对 象 进 行 操 而 作 E 。 Hien t 是 轻量 级 的 封 装 , 免 过 多 复 杂 的 功 能 , a ] b rae 避 减
轻了程序员 的负担 。同时 , 它也是一个开源的代码 , 提供开放
的 A I用户可 以自行扩充其功能 。Hient 在 大多数主流 P, brae
JE 2 E应用服务器的受管理环境中都 可以良好运作 , 也可 以作
为独 立 应 用 程 序 运 行 。 Hien t 的 精髓 是 持 久 层 实 现 模 式 [ 。它 完 全 是 针 对 b rae 4 ]
Ke w r s ORM , g t i h , t e ss e c , b r a e y o d Lih weg t Da a p r it n e Hi e n t
1 引言
在如 今 的企 业 级 应 用 开发 环 境 中 , 向对 象 的 开 发 方 式 面
2 基 于轻量 级数 据持久化 技 术的数 据库设 计
问题 , 高 开 发效 率 , 提 对象 / 系 映 射 ( jc/ eai a M a— 关 ObetR lt n l p o pn , M) 术 应 运 而 生 。OR 问 题 实 际上 就 是 如 何 实 现 ig OR 技 M
Hien t 是一个 面 向 Jv b rae aa环境 的对象/ 系数 据 库映 关 射工具 。Hien t 不仅仅 管理 Jv b rae aa类到 数据库 表 的 映射 ,
( le eo mp t rS in e, o g igU nv riy, o g ig 4 0 4 Chia Co lg fCo u e ce c Ch n qn iest Ch n qn 0 0 4, n)

Redis两种持久化方案RDB和AOF详解

Redis两种持久化方案RDB和AOF详解

Redis两种持久化⽅案RDB和AOF详解本⽂主要针对Redis 有两种持久化⽅案RDB和AOF做了详细的分析,希望我们整理的内容能够帮助⼤家对这个两种⽅案有更加深⼊的理解。

Redis 有两种持久化⽅案,RDB (Redis DataBase)和 AOF (Append Only File)。

如果你想快速了解和使⽤RDB和AOF,可以直接跳到⽂章底部看总结。

本章节通过配置⽂件,触发快照的⽅式,恢复数据的操作,命令操作演⽰,优缺点来学习 Redis 的重点知识持久化。

RDB 详解RDB 是 Redis 默认的持久化⽅案。

在指定的时间间隔内,执⾏指定次数的写操作,则会将内存中的数据写⼊到磁盘中。

即在指定⽬录下⽣成⼀个dump.rdb⽂件。

Redis 重启会通过加载dump.rdb⽂件恢复数据。

从配置⽂件了解RDB打开 redis.conf ⽂件,找到 SNAPSHOTTING 对应内容1 RDB核⼼规则配置(重点)save <seconds> <changes># save ""save 900 1save 300 10save 60 10000解说:save <指定时间间隔> <执⾏指定次数更新操作>,满⾜条件就将内存中的数据同步到硬盘中。

官⽅出⼚配置默认是 900秒内有1个更改,300秒内有10个更改以及60秒内有10000个更改,则将内存中的数据快照写⼊磁盘。

若不想⽤RDB⽅案,可以把 save "" 的注释打开,下⾯三个注释。

2 指定本地数据库⽂件名,⼀般采⽤默认的 dump.rdbdbfilename dump.rdb3 指定本地数据库存放⽬录,⼀般也⽤默认配置dir ./4 默认开启数据压缩rdbcompression yes解说:配置存储⾄本地数据库时是否压缩数据,默认为yes。

Redis采⽤LZF压缩⽅式,但占⽤了⼀点CPU的时间。

Docker数据管理和持久化存储技巧

Docker数据管理和持久化存储技巧随着云计算和容器技术的快速发展,越来越多的企业和开发者开始使用Docker 进行应用程序的部署和管理。

然而,对于使用Docker的人来说,数据管理和持久化存储一直是一个挑战。

在传统的环境下,我们可以通过各种方式来解决这个问题,比如使用数据库、硬盘或者网络存储设备。

但是在Docker容器内部,这些方法并不能直接适用。

本文将介绍一些在Docker中进行数据管理和持久化存储的技巧。

首先,让我们先了解一下Docker中的数据管理方式。

在Docker中,每个容器都有自己的文件系统,当容器停止后,其中的数据将会被删除。

这就意味着,如果您需要将数据持久化保存,您需要将其保存在容器外部。

一种常见的方法是使用数据卷。

数据卷是一个可以被一个或多个容器共享的特殊目录。

您可以通过将数据卷挂载到容器的特定路径来访问其中的数据。

使用数据卷的好处是,即使容器被删除或重新创建,数据卷中的数据仍然可以保留下来。

您可以使用命令行参数或Docker Compose文件来挂载数据卷。

其次,让我们讨论一下如何管理容器内部的数据库。

在一些情况下,我们可能需要在容器内运行数据库,例如MySQL或MongoDB。

当容器停止后,数据库中的数据也会丢失。

为了解决这个问题,我们可以使用Docker的数据卷来保存数据库的数据。

首先,我们可以创建一个数据卷容器,然后将其挂载到数据库容器。

这样,在数据库容器被重新创建时,数据将会从数据卷中加载,以实现数据的持久化。

另外,对于特定类型的应用程序,如文件存储或日志管理,我们可以使用网络存储设备来管理数据。

网络存储设备可以提供持久化和高可用性的数据存储,例如使用NFS(Network File System)或GlusterFS。

您可以将网络存储设备挂载到容器,以便容器可以访问其中的数据。

这种方法适用于需要在多个容器之间共享数据的应用程序。

此外,还有一些其他的技术和工具可以帮助我们更好地管理和存储Docker数据。

Docker容器的持久化存储与数据备份技巧

Docker容器的持久化存储与数据备份技巧近年来,容器技术的流行使得应用程序的部署和管理变得更加灵活和高效。

在众多的容器技术中,Docker成为了最受欢迎和广泛应用的一个。

然而,容器本身是临时性的,一旦容器被关闭,其中的数据也将会丢失。

为了解决这个问题,我们需要对Docker容器的数据进行持久化存储和备份。

一、Docker容器中的数据在了解持久化存储和备份技巧之前,我们先来看一下Docker容器中的数据是如何管理的。

Docker容器可以分为两个部分:镜像和容器。

镜像是一个可执行的软件包,包含了应用程序的文件系统,以及应用程序的执行命令。

而容器则是镜像的运行实例,容器中的数据通常是临时存储的,一旦容器关闭,其中的数据也会随之消失。

二、数据持久化存储为了实现容器中数据的持久化存储,我们可以采用以下几种方法:1. 数据卷(Docker Volumes)数据卷是一种特殊的目录,可以绕过文件系统,直接访问宿主机上的存储。

通过将数据卷挂载到容器中的指定路径,我们可以实现容器和宿主机之间的数据共享。

具体使用方法如下:首先,创建一个数据卷:```$ docker volume create mydata```然后,在启动容器时将数据卷挂载到容器中:```$ docker run -d -v mydata:/app/data myimage```现在,容器中的数据就会持久化存储在mydata数据卷中了。

2. 宿主机目录挂载除了使用数据卷,我们还可以直接将宿主机上的目录挂载到容器中,实现数据的持久化存储。

具体使用方法如下:首先,创建一个宿主机目录:```$ mkdir /data/mydata```然后,在启动容器时将宿主机目录挂载到容器中:```$ docker run -d -v /data/mydata:/app/data myimage```现在,容器中的数据就会持久化存储在宿主机的/data/mydata目录中了。

面向对象的持久化技术的研究与实现

第2 9卷第 9 期
V0.9 No9 12 .
企 业 技 术 开 发
TECHNOLOGI CAL DEVEL OPMENT OF ENTERP S RI E
2 1 年 5月 00
M a .01 v2 0
面向对象的持久化技术的研究与实现
周 浩 ,Байду номын сангаас张祖 平
(. 大 学 信 息 科 学 与 . 程学 院 , 南 长 沙 4 0 8 ;. 南 工业 大 学 计 算 机 与通 信 学 院 , 1中南 T 二 湖 10 32湖 湖南 株 洲 4 2 0 ) 10 7
员通 过 调用 各 种数 据 库 组 件就 可 以快 速 地 建 立 与数 据 库 的连 接 , 大 大促 进 了数据 库 应 用程 序 的开发 。 这 存 在 着较 大 的 差异 ,选 用 不 当将 严 重 影 响 所 开发 系 统 的
对于持久性对象 ,通过对象持久层来实现其与存储
机 制 的交 互 ,然 后 通过 客 户化 的界 面 组件 来 显 示 持 久性 操作 看成 了对象 , 自然 也就保 持 了界 面与 数据 对 象 的松散
紧密结 合 在 一起 ,结果 大 大影 响 了数 据 库应 用 程 序 的 可 规 律 的 代码 , 必须 手 动 来 完 成 , 这 种 “ 体 力 ” 但 纯 的开 发 , 工作量大 , 占时 多 , 且效 率 低 。 于 规 模 庞 大 、 务 复 杂 、 对 业 变 化频 繁 的数 据 库 应用 系 统 , 种 情 况尤 为 突 出 。 这
p r it n el y r r me o k t a e f i r v d a d s l r s a c e a e n te o i i a a i f t r r me o k o eL s n e sse c e a w r h t ss l- mp o e n ef e e r h d b s do rg n l sso u efa w r nt u o g a f i - h b ma h

带你了解iOS应用中的CoreData数据持久化技术

带你了解iOS应用中的CoreData数据持久化技术iOS应用中的CoreData数据持久化技术是一项强大的工具,让开发者可以在应用中进行数据操作、管理和索引。

通过CoreData,应用可以轻松地将数据持久化存储到本地,使得数据不会丢失或者被意外删除。

但是,CoreData不仅是一个单纯的数据持久化技术,还具有其它的强大特性,如自动排序、数据缓存、Model视图等等,这些特性可以让开发者更加灵活地操作数据,并且提高了应用的性能。

在这篇文章中,我们将深入了解iOS应用中的CoreData技术,包括CoreData的基本概念、开发流程、应用场景和常见问题等,帮助初学者更好地掌握这个技术,并且快速实践应用开发。

一、基本概念在了解CoreData之前,需要先了解一下几个绕不开的概念:1.实体(Entity):实体是CoreData中的基本数据模型,它由属性(Attribute)和关系(Relationship)组成。

每个实体都有一个唯一的标识符,用于在数据存储时区分不同的实体。

2.属性(Attribute):属性是指实体中的字段,如姓名、年龄、性别等等。

每个属性都有一个类型,如字符串、整型、浮点型等等。

3.关系(Relationship):关系是指实体与实体之间的关系,有一对一、一对多、多对多等不同的类型。

关系可以用来关联不同的实体。

4.context:context是CoreData中对数据进行CRUD(增删改查)操作的核心,所有数据的读写操作都在context中完成。

在进行数据操作时,需要将上下文context关联到特定的实体,然后通过操作context并保存,可以对当前实体进行CRUD操作。

二、开发流程1.创建模型(Model)在使用CoreData时,首先需要创建一个数据模型,这个数据模型会描述数据的结构、属性和关系等信息。

可以使用Xcode的Data Model工具快速创建模型,或者手动创建模型文件。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

文章编号:1008-1658(2003)01-0020-05对象持久化常用方法研究秦奕青(北京机械工业学院 计算机及自动化系, 北京100085)摘 要:持久化是一种存储对象的内部状态以备以后使用的机制。

若要把暂态对象永久保留,就必须把对象转换成一定格式的数据存储在文件或数据库中。

通过对内嵌SQL 、紧耦合和健壮持久层技术等3种常用持久化方法的研究,说明各自的特点,指出其优点和不足,为应用程序开发者在选择对象存储方法上提供参考。

关 键 词:持久性;持久对象;持久层中图分类号:TP 311.52 文献标识码:A高级程序设计语言为程序员提供了抽象的手段,使程序员从繁重的内存管理分配模式中解脱出来。

程序员使用高级程序设计语言在RAM 中构造复杂的数据模型,通过指针构造复杂的数据结构,并且可以快速而随机地访问RAM 中的数据。

但RAM 是临时性的存储器,如果欲使对象的生存期跨越程序的执行期,就必须借助外部存储器使数据成为永久性数据[1]。

在许多企业级应用中,要求将业务数据进行永久存储,即使应用程序终止,对象(object )的状态依然被保留以便在应用程序下一次执行时使用或者实现不同应用程序之间的数据共享。

1 对象持久化持久性(persistence )指对象的生存特性,如果对象的生存期跨越程序的执行期则称该对象具有持久性。

对象持久化技术的主要研究目标是在高级程序设计语言层次实现对象持久性,有效地存储和管理持久对象(persistent object ),使程序员按同一表达式语法访问暂态对象(transient object )和持久对象,统一暂态对象空间和永久对象空间[1]。

显然,对象持久化将改变对象的生命周期,在没有持久化机制的系统中,一个对象的典型生命周期是被创建—被使用—被删除。

一旦系统中支持持久化,对象的生命周期在被创建和被使用之后,可以通过持久化机制而延续,持久化就是通过提供保存对象状态并在以后恢复它的方法来存储和检索该对象的[2]。

这样,对象不需要重新创建,通过持久化存储和检索,就可以将对象恢复,做进一步使用,特别是在应用Java Bean 时,持久化使Bean 对象的定制信息不会在应用程序结束时丢失,这一点非常重要。

持久化对象时要考虑对象中需要持久存储的信息,换句话说,并不是所有对象的属性都需要保存,比如:用来跟踪鼠标按钮等临时信息的成员变量就不需要持久化。

此外,要考虑持久对象的存储场所,持久化的对象可以存储在文件系统、数据库系统、或大型事务处理系统中。

目前,在企业应用程序开发中,一方面面向对象(object 2oriented )的开发方法被更广泛地收稿日期:2002-12-06作者简介:秦奕青(1969-),女,北京人,北京机械工业学院计算机及自动化系讲师,硕士,主要从事计算机软件与理论的研究。

第18卷 第1期2003年3月 北京机械工业学院学报Journal of Beijing Institute of Machinery Vol.18 No.1Mar.2003使用,另一方面在数据存储方面,由于传统和性能的考虑,人们可能更多的使用或选择关系数据库(relational database )。

把对象存储到关系数据库有2种策略,一是围绕关系数据库来建立面向对象的应用,每一个对象,都要懂得如何存取其属性信息;二是把面向对象应用移到关系数据库中实施,以关系表格来模拟对象。

前者称为映射法,它把应用系统与数据存储分开,有利于系统的管理和扩展,是一种可行的策略[3]。

下面将介绍采用第一种策略持久化对象时几种不同的实现方法。

2 对象持久化的常用方法2.1 内嵌SQL 方法图1 在业务逻辑/域类中内嵌SQL 代码图1描述了一种最通用但是最不合人意的实现持久化的方法,这种方法将SQL 代码内置在类的源码中。

在Java环境中,通过手写或内嵌JD 2BC 机制来实现,即:在一个对象的Java 源码中内嵌某个特定数据库的自身命令,E JB(Enterprise Java Beans )就使用这种方法。

对小型应用系统和原型系统来说,它是一种可行的方法。

直接在对象中内嵌持久化代码的方法使得开发者能够快速书写代码,这是因为开发者熟悉特定数据库的开发过程。

另一方面,许多开发者依赖JDBC 来实现应用系统中的持久化需求,而JDBC 驱动程序很容易得到。

而数据库供应商倾向于这种方法是因为对使用这种持久化技术的应用系统进行优化是最容易的。

使用内嵌SQL 的缺点是它直接将业务类耦合到关系数据库的框架上,这样,即使是改变数据库列名这样的简单变化,也要修改应用系统源码。

同时,客户被局限在某个供应商和某一个数据库上,编写的组件可移植性差。

这意味着,如果开发者希望更新、优化或者移植应用系统,就需要重新写代码和调试。

而且,因为这些持久化代码被设计成局限于一个特定的数据库,所以应用系统还需要额外的开销将应用系统代码和持久化代码解耦合。

总之,在业务类中内嵌SQL 将导致代码难于维护和扩展[4,5]。

2.2 紧耦合映射方法图2描述了一个稍好一些的方法,它将业务逻辑类的SQL 语句封装在一个或多个数据类中,形成与应用系统对象层紧耦合的持久层,即:将一个对象模型紧密绑定到一个特定的映射定义上,所以它也被称为紧耦合技术。

该方法适合于少于40~50个业务类的原型和小型系统中,但它依然要求在数据库发生简单变化时重新编译数据类[4]。

使用这种方法的一个例子是在数据库中开发存储过程来表示对象(代替图2中数据类)。

开发者可以使用Transact 2SQL 写的存储过程来封装和标准化数据访问。

存储过程在一个地方创建,并且被应用程序调用。

创建存储过程是实现把数据库应用程序开发同数据库设计的物理实现分离的最好方法。

如果底层数据库改变了,并且存储过程被仔细的修改以反映这些12第1期 秦奕青:对象持久化常用方法研究 图2 创建对应于业务域类的数据类变化,则对存储过程的调用不会被“中断”。

另一个例子是微软的ADO “策略”。

ASP 内置的ADO 组件是微软公司开发的互联网络数据库存取解决方案,也是ASP 存取数据库的重要功臣,ADO 通过ODBC 访问数据库。

尽管数据存储可以以任何级别存在于分布式应用程序中,但数据层负责数据存储、检索、维护和完整性。

在应用程序级别,数据存取由ActiveX Data Ob 2jects 支持。

在系统级别,它由OL E DB 支持,这是一种在应用程序和底层数据存储间提供标准接口的低级接口。

此外,这种紧耦合持久化技术同样可以应用在Java 环境中,它是在映射层中或者是在后处理(post 2processed )的字节码中内嵌JDBC 接口调用,而不是直接在Java 源码中内嵌。

这种方法最值得一提的地方是至少可以将处理硬编码交互的源码封装在一个特定的地方,即:数据类。

在分离的数据类或存储过程中实现SQL 代码只是稍好一点。

许多开发者最初被这种方法吸引,要么因为供应商声称该方法对数据库是透明的,要么因为它使用简单的后处理工具。

还有就是该方法相对简单,有一个较简单的对象结构。

但是,实际上,它带来与第一种方法同样的结果,在支持多对象模型对应同一个映射定义方面缺少灵活性,换句话说,开发者必须手工映射每一个对象模型。

另外,在对应用系统和映射定义的支持、更新和扩展方面,这种方法同样是缺少灵活性。

一旦持久化层源码有任何的变化,就要求对应用系统源码的重新编译和重新配置。

如果在映射系统中使用字节码操作,象ODM G 模型的情况,就会使得应用系统的调试成为令人沮丧和耗时的工作。

例如,当一个优化的E JB 对象模型和applet/servlet 对象模型访问同一个数据库的属性,如果使用紧耦合映射技术,为了在两个模型之间获得相同的映射框架,就必须重新映射每一种实现,而且要有对映射定义的多个支持。

如果要在应用系统中做一点简单的变化,如:改变数据库表结构或应用系统中的SQL ,或者向应用系统中添加额外的持久化属性,那么,由于需要为应用系统中的每一个对象手工修改每一个映射定义,所以会带来极大的工作量。

更糟糕的是,特别是在企业级应用中,这种方法在一个异构组件环境中不能很好地独立,而且由于方法是静态的,即:一个类对应一个映射模型,所以它是不可扩展的[5]。

尽管从概念上讲,一个类对应一个映射模型的方法很有吸引力,但是一旦开发者进入维护阶段,或开始一个中、大型项目,这种僵硬的体系结构由于静态和黑盒设计方法,会带来相当的维护工作量和成本负担。

2.3 健壮持久层技术图3使用的方法是创建一个健壮的持久层,它用这样一种方式将对象映射到持久化机制中,即:关系框架的简单变化不会影响面向对象的代码。

这种方法优点是应用系统程序员不需22 北京机械工业学院学报 第18卷要了解关系数据库的框架内容,事实上,他们甚至不需要知道数据正在被存储到一个关系数据库中。

这种方法允许机构开发大规模的、关键任务的应用系统。

它的缺点是对应用系统的性能有影响,即使系统构建得好,这种影响依然存在,只不过会小一点。

图3 一个健壮的持久层图4 健壮持久层应用系统 图4给出一个建有健壮持久层(持久化类)的应用系统的类类型体系结构,当程序员为应用系统编码时必须遵循这个体系结构。

该体系结构是基于层模式的,层模式的基本思想是在一个给定层中的类可以与该层中的其它类交互,或与临邻接层中的类交互。

源码层次化使得应用系统内部的耦合被降低,因而系统更易于维护和功能增强,也大大提高了应用系统的健壮性。

图4表明应用系统的用户直接与应用系统的用户接口交互。

用户接口层通常是由实现屏显和报告的类组成。

用户接口类被允许发送消息给业务层、控制器层和系统层中的类。

业务层实现应用系统中的业务域类。

例如,一个电信公司应用系统的业务层要包括诸如客户类、电话类等类类型。

另一方面,控制器层实现业务逻辑,这些业务逻辑涉及几个业务域类或者其它的控制器类,如:一个电话计费类(该类将与电话类、客户类和电话计划类的实例交互)之间的合作。

系统层实现的类提供对操作系统功能的访问,如:打印和电子邮件。

业务类被允许发送消息给系统层和持久层中的类。

持久层封装行为,应用系统需要这些行为在对象数据库、文件和关系数据库等持久化机制中存储对象[4]。

如果遵循这样一个类—类型体系结构,那么由于应用系统中的耦合度降低,源码的健壮性会显著提高。

图4显示,用户接口层为了得到信息,它必须与业务层中的对象交互,而这些业务层的对象要与持久化层交互,以得到在持久化机制中存储的对象。

这是类—类型体系结构的一个重要特性,即:不允许应用系统的用户接口层直接存取存储在持久化机制中的信息,从而有效地将用户接口层从持久化框架中解耦合。

这意味着即使改变对象存储的方式,如:重新组织一个关系数据库的表或从一个供应商的持久化机制转变到另一个供应商的持久化机制,也不需要重新写屏幕和报告。

相关文档
最新文档