(计算机软件与理论专业论文)采用orm技术的软件开发方法研究.pdf_第1页
(计算机软件与理论专业论文)采用orm技术的软件开发方法研究.pdf_第2页
(计算机软件与理论专业论文)采用orm技术的软件开发方法研究.pdf_第3页
(计算机软件与理论专业论文)采用orm技术的软件开发方法研究.pdf_第4页
(计算机软件与理论专业论文)采用orm技术的软件开发方法研究.pdf_第5页
已阅读5页,还剩53页未读 继续免费阅读

(计算机软件与理论专业论文)采用orm技术的软件开发方法研究.pdf.pdf 免费下载

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

南京邮电大学坝士研究生学位论文 摘要 摘要 当前,在大多数采用面向对象( o b j e c to r i e n t ,0 0 ) 方法且涉及数据库的软件 开发中都需要设计对象和关系数据库,程序员在开发应用程序时都要编写大量重复的 数据访问层的代码,用来从数据库读取、保存、删除对象信息以及改变对象状态等。 关系数据库专家s c o t tw a m b l e r 于1 9 9 5 年运用面向对象方法将数据实体从关系 数据库中提取出来并持久化,初步形成持久对象层的一般理论与方法,该套理论与方 法逐步演变为关系对象映射( o b j e c tr e l a t i o nm a p p i n g ,0 r m ) 技术。近年来,随着 基于w e b 的软件开发大规模运用,特别是基于j 2 e e 的企业级软件开发的兴起,0 r m 技术日渐被广泛运用到软件开发中。 本文首先介绍对象模型与关系模型的两个基本定义并推出两者之间的映射函数, 同时通过u m l 建立对象模型与关系模型的映射。然后说明采用o r m 技术进行软件开 发的分层系统架构及一般方法。接着阐述采用o r m 技术进行软件开发时关键部分持 久对象层设计的需求说明和详细设计方案,并介绍了采用o p d v l 技术进行软件开发时 的其他相关技术。最后通过一个自己参与的丌发实例说明采用o r m 技术后,与传统 软件丌发相比具有明显的改进。 关键词:对象关系映射对象模型关系模型统一建模语言持久对象层h i b e r n a t e 南京邮电人学碗 :研究生学位论文摘要 a b s t r a c t n o w ,m o s ts o f t w a r ed e v e l o p i n gd e s i g n si n v o l v e dd a t a b a s eu s i n go b j e c t o r i e n t e dm e t h o dn e e dt od e s i g no b j e c ta n dr e l a t i o nd a t a b a s e ,p r o g r a m m e r sh a v e t ow r it em a n yr e p e a t i n gd a t aa c c e s sl a y e rc o d e st or e a ds a v eo rd e l e t e o b j e c t s i n f o r m a t i o na n du p d a t et h e i rs t a t e s r e l a t i o nd a t a b a s ee x p e r ts c o t tw a m b l e rp u tf o r w a r dh o wt ot a k eo u td a t a e n t i t i e sf r o md a t a b a s eu s i n g0 0m e t h o da n dm a k ei tp e r s i s t e n ti n1 9 9 5 ,f o r m e d p e r s i s t e n to b j e c tl a y e rt h e o r ya n dg e n e r a l m e t h o dw h i c he v o l v e d o b j e c t r a l a t i o nm a p p i n gt h e o r y 。l a t e l y ,a l o n gw i t h s o f t w a r ed e v e l o p m e n t t e c h n o l o g yb a s e do nw e b ,e s p e c i a l l ya l o n gw i t hr i s i n go fe n t e r p r i s e m e n t s o f t w a r ed e v e l o p m e n tw i t hj 2 e e ,o r mi su s e dm o r ea n dm o r ea b r o a d l y t h i sa r t i c l ef i r s tw i l lp r o p o s e sb a s i cd e f i n i t i o no fo b j e c tm o d e la n d r e l a t i o nm o d e la n dt h e i rm a p p i n gf u n c t i o n ,a n dc o n s t i t u t et h em a p p i n gu s i n g u m l t h e n ,i tw i l le x p l a i nl a y e rs t r u c t u r ea n dg e n e r a lm e t h o do fo r m t h e ni t w i l le x p a t i a t et h er e q u i r e m e n ta n dd e t a i l e dd e s i g no fp e r s i s t e n to b j e c tl a y e r a n do t h e rk e yt e c h n o l o g ya l o n gw i t hi t a tl a s ti tw i l li n t r o d u c ea ne x a m p l e i nw h i c ha u t h o re x p e r i e n c e dt h eo r m ,a n dt h ea n v a n t a g eo fo r mc oo l dd e v e l o p i n g m e t h o d k e y w o r d :o r mo b j e c tm o d e lr e l a t i o nm o d e lu m l p e r s i s t e n tl a y e rh i b e r n a t e 南京邮电大学 硕士学位论文摘要 学科、专业:工学计算机软件与理论 研究方向:基于网络的计算机软件应用技术 作 者:三q 堕级研究生 朱常宝 指导教师睦查坠 题目:采用o r m 技术的软件开发方法研究 英文题目:r e s e a r c ho ns o f t w a r ed e v e l o p m e n tm e t h o db a s e do n o r mt e c h n o l o g y 主题词:对象关系映射对象模型关系模型 统一建模语言持久对象层h i b e r n a t e k e y w o r d s : o r m o b j e c tm o d e l r e l a t i o nm o d e l u m lp e r s i s t e n tl a y e rh i b e r n a t e 南京忡i 乜人学硕1 研究生学位论文笫一章引占 1 10 r m 技术的引入 第一章引言 当静,在大多数采用o o 方法且涉及数据库的软件开发中都需要设计对象和关系 数据库,在软件的业务逻辑层和用户界面层要对编写的对象进行操作,而在改变对象 的信息后还需要把对象的信息保存在关系数据库中。因此,在开发一个业务逻辑层和 用户界面层分离的应用程序时,程序员要写不少数据访问层( d a t aa c c e s sl a y e r , d a l l 的代码,用来从数据库读取、保存、删除对象信息以及改变对象状态等。 在引入对象关系映射技术之前,软件开发过程中实现d a l 的方式主要有两种, 一种是将结构化查询语言( s t r u c t u r e q u e r y l a n g u a g e ,s q l ) 嵌入到业务实现类中,即 在以c + + 等为主语言实现类的代码中,当需要使用数据库时通过定的接口将s q l 语句嵌入,编译时与主语言实现代码一起编译。比如早期c + + 中的a c t i v e x 数据对象 ( a c t i v e x d a t a o b j e c t s ,a d o ) 和早期的o r a c l e 调用接口( o r a c l e c a l l i n t e r f a c e ,o c i ) 等,这种方法的实现如图1 1 所示。 u o n 协,n c 。l a s s e s 幽卜1 嵌入式s q l 实现示例 这种实现d a l 方法的优点是可以实现快速编码,且对小型应用和简单原型的丌 发比较适用。缺点就是会造成应用类与关系数据库的耦合度很高,这意味着数据库很 小的改动如属性值的重新命名都会造成整个原码的重新编写,这显然是有悖于o o 方 法的封装原则的。 另一种不采用o r m 实现d a l 的方法是将对数据库的操作单独封装在一个或多 个“数据类”( d a t a c l a s s e s ,d c ) 0 7 ,业务实现类通过对d c 的调用来实现d a l 的操 作,o r m 技术其实也是在此基础上发展起来的。比如o r a c l e 和s q l s e r v e r 等数据库系 统中的存储过程( s t o r ep r o c e d u r e ,s p ) 6 0 ,业务实现类将需要数据存取的与数据库表 的属性所对应的参数传入存储过程,由存储过程实现d a l 的操作。还有采用j d b c 连接的e j b ( e n t e r p r i s ej a v a b e a n ) 中实体类的实现也是采用数据类的方式。如图1 2 塑塞业皇查鲎! 翌! 型篓兰兰竺丝苎 兰二量! ! 亘 所示,这种方式目前仍在一定范围内广泛应用,它能很好地满足业务类结构不太复杂 的简单企业级应用的要求,并且由于d a t a c l a s s e s 封装了对数据库的操作,也能很好 地体现o o 的思想。但与第一种方式一样,当数据库发生变化时,难免要对d a t a c l a s s e s 进行重新编译。 器一( x 3 一 - g o l - _ _ _ _ 卜 d o n m l n u h c a “0 【l 图1 2d a t ac l a s s 实现示例 另外,这两种方式中,不管是嵌入式s q l 还是d a t a c l a s s e s 中,数据访问代码都 难免有大量的类似与重复,这种在每个项目中都重复且具备相同模式的代码明显是一 种资源与人力的浪费。在这种情况下o r m 技术应运而生,o r m 的核心思想是引入 持久层( p e r s i s t e n tl a y e r , p l ) 的概念,它在关系型数据库和对象之间产生一个自动映 射,这样在具体的操作数据库操作中就不需要再与复杂的s q l 语句打交道。与上述 两种方式比较,o r m 实现的简单示例如图1 3 所示。 器一。 图1 3o r m 实现简单示例 图1 3 与图1 2 比较类似,但由于o r a 4 中核心部分一灵活的持久层的引入,软 件设计人员只需要关注业务逻辑中的对象架构,而不是底层的重复性的数据库s q l 或j d b c o d b c 代码,应用程序的设计者甚至不需要知道数据库的设计及数据存储方 式。o r m 能够非常好地满足面向对象的霈求。据统计,采用o r m 可将软件开发时间 和成本缩短4 0 ,并且由于很方便地将业务层与实际的数据存储分开,从而极大的提 高数据读写性,也简化了代码的调优与测试。很多开发人员和专家都认为,o r m 将 成为涉及数据库面向对象开发中的主流开发模式。 1 2o r m 技术的发展现状 目前,存在多种o r m 或类似o 叫的软件设计架构。比如,1 9 9 2 年m i c r o s o f t 和 s y b a s e 、d i g i t a l 共同制定了o d b c 标准接口,以单一的o d b c a p i 来存取各种不同的 2 南京邮电大学顺士研究生学位论文 第一覃引言 数据库。随后o d b c 便获得了许多数据库厂商和第三方的支持而逐渐成为c + + 领域标 准的数据存取技术。1 9 9 3 年m i c r o s o f t 使用对象连接与嵌入技术( o b j e c tl i n k i n ga n d e m b e d d i n g ,o l e ) 封装了存取a o e s s 数据库的引擎,实现了数据访问对象( d a t a a c c e s s o b j e c t ,d a o ) 。由于d a o 在结合o d b c 存取关系数据库时表现得并不好,因此在1 9 9 5 年m i c r o s o f t 同样以o l ea u t o m a t i o n 技术直接封装o d b ca p i ,让程序员能够存取关 系数据库,这种数据存取技术便称为远程数据对象( r e m o t ed a t ao b j e c t ,r d o ) 。d a o 与r d o 相结合的后继产物就是目前仍在广泛使用的a c t i v e x 数据对象( a c t i v e xd a t a o b j e c t ,a d o ) ,后来m i c r o s o f t 将a d o 引入到n e t 框架中成为a d o n e t ,它在原来 a d 0 2 0 的基础上提供平台互用和可收缩的数据访问功能。 从o d b c 到d a o 再到a d o ,特别是在a d o n e t 支持建立实体对象类访问数据库, 并且,一些开源的n e to r m 架构比如将h i b e r n a t e 移植到n e t 平台的n h i b e r n a t e 和o r m n e t 等都实现了o r m 或类似o r m 的架构。 当然,从j 2 e e 的标准与规范制定及不断完善的发展历程来看,它是从j a v a 领域 发展起来的,在基于j a v a 的数据访问方式的发展过程中,在发展初期是落后于微软 的,所以j d b c 、基于j a v a 的d a o 、j d o ( j a v ad a t ao b j e c t ) 都或多或少地借鉴或继 承了o d b c 、d a o 和r d o a d o ,而随着e j b 在j 2 e e 中的深入应用、s t r u t s s p r i n g 等 m v c 软件架构的兴起及h i b e r n a t e 等一系列基于j a v a 的开源o r m 架构的推出和完善, 可以说在j z e e 的开发中基于j a v a 的这些架构是领先的起跑者。特别h i b e r n a t e 目前 已成为o r m 领域事实的标准,a s p n e t2 0 0 5 中实现o r m 的思想大都借鉴了h i b e r n a t e 的实现思想。 1 3 论文结构 本文的第二章将介绍对象模型与关系模型的两个基本定义和两者之间的映射函 数,同时介绍通过u m l 建立对象模型与关系模型的映射。第三章阐述采用o r m 技 术进行软件开发的一般方法。第四节介绍o r m 技术的核心持久对象层的设计。第五 节介绍o r m 进行软件开发的的其它关键技术。第六章介绍运行o r m 技术的一个实 例模型。第七章进行全文的总结。 1 4 本章小结 本章首先介绍了涉及数据库的软件玎发中的一般方法,接着引入了o r m 方法,并 3 南京i 峪电人学硕士研究生学位论文 第一章引言 数据库。随后o d b c 便获得了许多数据库厂商和第三方的支持而逐渐成为c + + 领域标 准的数据存取技术。1 9 9 3 年m i c r o s o f t 使用对象连接与嵌入技术( o b j e c tl i n k i n ga n d e m b e d d i n g ,o l e ) 封装了存取a c e s s 数据库的引擎,实现了数据访问对象( d a t a a c c e s s o b j e c t ,d a o ) 。由于d a o 在结合o d b c 存取关系数据库时表现得并不好,因此在1 9 9 5 年m i c r o s o f t 同样以o l ea u t o m a t i o n 技术直接封装o d b ca p i ,让程序员能够存取关 系数据库,这种数据存取技术便称为远程数据对象( r e m o t ed a t ao b j e c t ,r d o ) 。d a o 与r d o 相结合的后继产物就是目前仍在广泛使用的a e t iv e x 数据对象( a c t i v e xd a t a o b j e c t ,a d o ) ,后来m i c r o s o f t 将a d o 引八到n e t 框架中成为a d o n e t ,它在原来 a d 0 2 0 的基础上提供平台互用和可收缩的数据访问功能。 从o d b c 到d a o 再到a d o ,特别是在a d o n e t 支持建立实体对象类访问数据库, 并且一些开源的n e to r m 架构比如将h i b e r n a t e 移植到n e t 平台的n h i b e r n a t e 和o r m n e t 等都实现了o r m 或类似o r b l 的架构。 当然,从j 2 e e 的标准与规范制定及不断完善的发展历程来看,它是从j a v a 领域 发展起来的,在基于j a v a 的数据访问方式的发展过程中,在发展初期是落后于微软 的,所以j d b c 、基于j a v a 的d a o 、j d o ( j a v ad a t ao b j e c t ) 都或多或少地借鉴或继 承了o d b c 、d a o 和r d o a d o ,而随着e j b 在j 2 e e 中的深入应用、s t r u t s s p r i n g 等 m v c 软件架构的兴起及h i b e r n a t e 等一系列基于j a v a 的开源o r m 架构的推出和完善, 可以说在j 2 e e 的开发中基于j a v a 的这些架构是领先的起跑者。特别h i b e r n a t e 目前 已成为o r m 领域事实的标准,a s p n e t2 0 0 5 中实现0 r m 的思想大都借鉴了h i b e r n a t e 的实现思想。 1 3 论文结构 本文的第二章将介绍对象模型与关系模型的两个基本定义和两者之间的映射函 数,同时介绍通过u m l 建立对象模型与关系模型的映射。第三章阐述采用o r m 技 术进行软件开发的一般方法。第四节介绍o r m 技术的核心持久对象层的设计。第五 节介绍0 r m 进行软件开发的的其它关键技术。第六章介绍运行o r i v l 技术的一个实 例模型。第七章进行全文的总结。 1 4 本章小结 本章首先介绍了涉及数据库的软件丌发中的一般方法,接着引入了o r m 方法,并 本章首先介绍了涉及数据库的软件开发中的一般方法,接着引入了o r m 方法,并 3 南京邮电大学硕士研究生学位论文 第一章引杂 对之优点进行简单的分析,然后对o r m 技术的发展现状进行简单介绍。 4 南京邮电大学倾士研究生学位论文 第一二章对象模型与关系模型及其映射的建立 第二章对象模型与关系模型及其映射的建立 2 1 对象模型与关系模型 u m l 参考手册中将对象定义为“具有良好定义的封装了状态和行为的边界的 具体实例,类的实例”“,从数理的角度也可以将对象视为数据和函数的内聚捆绑。 关系模型以集合论中的关系作为数学基础,它是一个( 数) 域的迪卡尔积的子集。于 是我们引出对象模型中的对象类和关系模型中的关系的一般定义: 定义1 :( 对象类) 一个对象类可简单定义为0 ( ab am 。,m 。) ,其中a 。 ( i = l ,n ) 为对象类的属性,定义在域d 。上:m ( i = l ,k ) 为对象类的方法,其返回 值定义在域d 上。 定义2 :( 关系) 关系r 是笛卡尔积d i x d 2 x x d 。的一个子集,d d : d 是所有的有序的n 元组 的集合,其中d ,d ,d :d :,d 。d 。,d d z x d 。称为关系r 的域。关系模式的一般形式可表示为r = ,其 中u 为组成关系r 的全部属性的集合,d 为域的集合,d o m 为u 与d 间的映射,为 u 上的一组依赖约束。 从定义不难看出,就单个对象和关系而言,对象的属性及关系元组均定义在域 d 。( 1 i t e r n p i c l u c + p k _ i t e m 3 4+ f k _ i t e r n p i d u r e 3 7 p i c t ur e :n u m b e r erdd i d :v h o h _ 州! 1 0 8 n j c w 2 1 1 r i t e m _ i dn u m b e r , i c e :n u m b e r 隙i l e m p i c t ur e _ i d n u m b e r ( p ) p k _ i t e m 3 d 0 :箕鬻黜然:搿 2 2 2 对象间1 :n 映射 图2 - 1 对象间1 :1 映射 对象间的对应关系为l :n 时,关系表间的映射可将“1 ”端的主键设置为“n ”端 的外键。如图2 - 2 中,对象i t e m 与o r d e r e d i t e m 为1 :1 1 关系,映射关系表可设置表i t e m 的主键i t e mi d 为表o r d e r e d i t e m 的外键。 同 同 i t e m + p k _ m 1 3 + f ko 州er e d h 日m 2 0h o r d e r e d l t e r n _ o :n u m b e r ”1“t v h c h h z s c m “p ! t l 8 r i i r v r c h 1 0 i t t m s o r d j r e d :n u m b e r p r i c en u m b e r r i t e m i d :n u m b e r p k _ i t e m l 3 0 芝军熬。p k - 0 ko 。r d e 。r e d lk 。e 。m 。1 0 0 0 2 2 3 对象间m :n 映射 图2 2 对象间1 :n 映射 对象间的对应关系为m :n 时,关系表间的映射可将两个表的主键提取列入一张 单独的表,并将这两个主键分别作为新生成表的主键和外键。如图2 - 3 ,对象c u s t o m e r 和e m p l o y e e 为m :n 的关系,映射关系表可分别从表c u s t o m e r 和e m l o y e e 中提取主键 c u s t o m e r _ i d 和e m p l o y e e j d 构成新表将这两个表关联起来。 南京邮电大学颂士研究生学位论文第二章对象模型与关系模型及其映射的建立 2 2 4 对象间继承关系映射 图2 - 3 对象间m :n 映射 对象间存在继承关系时,关系表间的映射可将父对象对应表的主键设置为子对象对应表的主 键和外键,圈2 - 4 表示子对象与父对象之间是“i sa k i n do f ”的关系。 同 同 c o r p o r a t e c u s t o r n e r c u s t o m e r 斗c o f f 函p t 。r i m c e e _ n 1 0 u m :n b u e m r b e r c u s l r l a r r l ev a r c h a r 2 l 0 f i c 1 a d 。w d r e s 赫si o i ;i 凇盘嚣r 嗤c u s t o m e ri dn u m b e r c u s l i dn u m b e r + p kc u s t o m e r 2 6 + f kc 0 阳d ,o t b c n o m o 圆 ( ( p k p kc u s t o m e r 嚣0 :群器f p k kc c o e p a r a i e r a t e c c u s l u s t o m e e m i 删r 3 2 0 f kc o r p o r a t e c u s t o m e r 4 1 0 图2 4 对象间单根继承关系映射 多重继承是指一个子类有两个或两个以上的直接父类,如图2 5 所示,d r a g o n 直 接继承了类b i r d 和l i z a r d ( 蜥蜴) 。在面向对象语言中,多重继承通常被认为是有 问题的,多数语言j :l 女g j a v a 等不支持多重继承。但是像c + + 和e i f f e i 这样的语言支持 多重继承,所以也存在需要将多重继承层次结构映射到关系数据库中去的情况。在中 d r a g o n 、b i r d 、l i z a r d 均为生物,其0 i d 即c r e a t u r e p o i d 对于同一个d r a g o n 来说应该 在b i r d 和l i z a r d 表中是一样的,所以很容易实现多重继承。 南京| i | | 5 电人学硕i 研究生学位论文 第二章对象模型与关系模型及其映射的建立 2 2 5 对象问递归关系映射 p o 蜘纠删c 村撕h m o d _ l b 图2 - 5 对象间的多重继承关系映射 递归关系,也叫自反关系( r e f l e x i v er e l a t i o n s h i p ) ,是指关系的两端指向同一 实体( 类,数据实体,表,) 。举例来说,图2 - 6 中的管理( m a n a g e ) 关系就是递 归的,表达了一个雇员可以管理若干其他雇员这样的概念。t e a m ( 团队) 类指向自身 的聚合关系也是递归的,一个团队可能是另外的一个或多个团队的一部分。 图2 - 6 描述了一个包含了两个递归关系的类模型,以及对应的映射后的数据模 型。为简化起见,类模型仅包含了类及其关系,数据模型仅包含了键。跟普通的多对 多关系映射一样,多对多递归聚合被映射为s u h t e a m s 关联表,唯一的区别在于关联 表中的两个外键现在指向同一张表。类似的,一对多的m a n a g e 关联的映射方式与普 通的一对多关系的映射方式相同,只不过m a n a g e r e m p l o y e e p o i d 字段指向的是 e m p l o y e e 表中的另一行而已,即存放管理者( m a n a g e r ) 数据的那一行。 9 孽刍笋 南京邮i u 大学顺l 研究生学位论立第一二章对象模型。i 关系模型及冀映射的建立 ( 图2 - 6 对象i 司递归关系映射 以上所列的几种是面向对象程序设计中常见且基本的数据模型,在实际的设计过 程还会有许多特殊情况,比如在将对象映射到一张表中由于有属性值的重复可能会有 些冗余,而为了减少这种冗余就要通过关系模式的分解将一张关系表分解成多张没有 函数依赖的关系表,此时会出现一个对象对应多张关系表;有时一个父类对应多个子 类,而如果每个子类相对于父类变化的属性很少或只是利用多态性对父类的方法进行 重载而并没有增加属性,此时为了节省空间,可设置多个子类只对应于一张父类。这 些都可在上述几种基本映射的基础上利用关系模式的方法加以解决。 2 3 本章小结 本章首先通过数学定义分别引出对象模型与关系模型,可从数理角度二者实现关 联的可行性,然后通过介绍如何通过u m l 建立对象模型与关系模型的映射。 1 0 南京i 1 | j 电大学倾1 + 研究生学位论史 第三章采用o r m 技术进行软件开发的一般架构 第三章采用o r m 技术进行软件开发的一般架构 采用o r m 框架的软件设计要求先进行对象建模而不是数据建模,即首先从问题领 域出发,以面向对象( 或面向方面) 的思路来分解问题,然后把这种对象模型映射到 数据库,而实现对象与关系的映射一般可通过组件技术来实现,比如j a v a 开源项目 中比较流行的h i b e r n a t e 、j d o ( j a v ad a t ao b j e c t s ) 、s p r i n g 等架构技术,均是将对 象持久化到关系数据库中的实现技术。对特定的数据存取这一点o r m 与面向对象数据 库( o o d b m s ,o b j e c to r i e n t e d d a t a b a s em a n a g e m e n ts y s t e m ) 有所区别,o o d b m s 试图直接在数据库中提供内存对象模型,存储对象模型,遍历对象模型,检索对象模 型从而造成速度上的问题,而o r m 中对象模型本身是最适合内存中维护的,比如将引 用从一个对象实例变成另外一个对象实例。在内存中维护对象模型,最后以事务的形 式于变万化以后最终的对象关系快照让r d b m s 来持久。 在采用0 0 方法的软件设计中,将软件的架构用分层的形式表现出来是一种较好 的方式。分层系统采用层次化的组织方法,每一层向上层提供服务,并利用下层的服 务。在其中,内部层次全部被隐藏,只有外部层次和一部分功能可被外部所见。分层 思想是许多大型软件设计的基本思想,比如t c p i p 的七层协议就是典型的分层架构, 还有操作系统的设计,象在u n i x 中内核提供了基本而标准的i o 接口,各种硬件和 外部设备针对标准接口编写驱动后就能很好地与内核进行连接,而u n i x 的网络套接 字部分也是建立之上的,这应该是u n i x 作为通用的网络多用户操作系统的原因之一。 分层系统的优点很多,首先是支持基于不断递增的抽象层系统的设计。允许把一 个复杂的问题分为一系列顺序的步骤来实现。 其次是支持功能增强。就像流水线结 构那样,每一层至多只和上、下层交互,功能改变至多影响到相邻的两个层。再次是 支持复用。与抽象数据类型一样,它们允许相同层的不同实现可以交替的使用,为邻 近的层提供相同的接口“”。当然,不是所有的系统都可以容易的构建分层模型,即使 一个系统的逻辑结构是分层的。出于性能方面的考虑,可能需要高层功能和低层实现 部分的更紧密的耦合。 3 1 传统软件分层结构 图3 1 是适用于一般软件架构的分层类结构图,一个软件从结构上大体可分为用 塑塞业皇查兰堡! :婴丝生兰竺堡苎竺兰翌墨旦! 型塾查些堡竺生堑茎堕二墼型塑 户界面层、业务逻辑层、控制层、系统调用层和数据存储层。这种分层结构对应到 0 0 技术的类就会有相应的用户界面类、业务类、控制类、系统类等。用户界面层由 一些实现屏幕输入和报表、图形输出的类组成,业务层由实现业务应用主要功能的类 组成,控制层由一些控制业务流程的类组成,系统调用层主要处理系统调用,数据存 储层主要由数据库记录及文件组成。 图3 - 1 一般软件架构分层类结构图 3 2 采用o r m 技术的分层结构 采用o r m 技术进行软件设计开发采用基于分层的架构也是一种比较好的方法,引 入o r m 后,由于有持久层的存在,业务层不直接对数据库中的数据进行操作,所以采 用o r m 技术的软件架构分层类结构图如图3 - 2 所示。 南京b 人学硕l 研究生学位论文 笫三章采用0 脒技术进行软件开发的一般架构 图3 - 2 采用0 r m 技术的软件架构分层类结构图 根据分层结构及o r m 技术的特点,采用此种架构进行软件开发时有两个问题需 要注意。一是用户界面的实现类不能直接访问存储数据及持久层实现代码,将业务实 现封装在业务类及逻辑控制类中而不是用户界面的类中,用户界面类仅实现输入与输 出。在这种情况下,如果业务流程或实现机制发生变化,不会影响用户界面类的功能 实现。二是业务类及逻辑控制类不直接访问存储数据,如果数据库管理员修改了数 据库的表结构或存储机制,或者持久对象设计开发人员修改关系对象的映射机制,开 发人员不需要修改用户界面实现类。 3 3 本章小结 本章介绍软件分层架构及其运用于大型软件开发的优点,并由传统软件结构引出 采用o 脚技术的分层软件结构,同时指出运用o r m 技术的分层结构进行软件设计时需 要注意的两个问题。 南京邮电大学硎士研究生学位论文第四章持久对象层的设计 第四章持久对象层的设计 持久层( p e r s i s t e n tl a y e r , p l ) 是o r m 技术的核心部分。采用o r m 方法要求在软件 设计中首先要分析问题域,找出所有问题域中相关事物,从中抽象出对象;然后从抽 象出的对象中找出所有的持久对象( p e r s i s i r a n to b j e c t ,p o ) ,所谓持久对象就是 由数据库管理系统负责管理的,可以永久保留,将来可被提取的对象,将这些持久对 象以“一类一表格”的原则映射到数据库中,通过数据库管理系统建立表格。在定义 持久对象时,所有持久对象均采用“双构造函数”的方法在程序中进行构造,其中, 一个构造函数参数为所有初始化该持久对象的值,封装数据模块中“存”操作,另一 个构造函数的参数为唯一标识该持久对象的值,封装数据模块中“取”操作。其它数 据库操作由持久对象层相应方法封装,所有与数据库层发生交互的动作,均放在此数 据模块中对持久对象的相应方法进行封装,做到数据与界面的分离。 其它的非持 久对象或者说业务对象均继承于所定义的持久对象,具体软件功能由相应对象协同实 现。在图3 2 中,持久对象层透明地实现了持久化对象与原始数据的映射。 4 1 业务对象的持久化 业务对象( b u s i n e s so b j e c t ,b o ) ,是对真实世界的实体的软件抽象,它可以代 表业务领域中的人,地点,事物或概念。业务对象包括状态和行为,判断一个类是否 成为业务对象的一个重要标准,是看这个类是否同是拥有状态和行为。业务对象具有 的特征:包含状态和行为,代表业务领域的人,地点,事物或概念,可以重用。通常, 在j a v a 领域,业务对象可分为三类: ( 1 ) 实体业务对象,代表人,地点,事物或概念的组件,在分布式应用中可以作 为实体e j b ,在更一般的w e b 应用中可以作为包含状态和行为的j a v ab e a n 。 ( 2 ) 过程业务对象,代表应用中的业务过程或流程,通常依赖于业务对象。在j z e e 应用中,它们通常作为会话e j b 或是消息驱动e j b 。在非分布式应用中,我们可以使 用具有管理和控制应用行为的常规j a v ab e a n 。 ( 3 ) 事件业务对象,代表应用中的一些事件,如异常,警告或是超时。 业务对象提供了通用的术语概念,不管是技术人员还是非技术人员都可以共享并 理解他们,并且它可以隐藏实现细节,对外只暴露接口。 业务对象在j a v a 编程中可以分两类,分别是普通纯j a v a 对象( p l a i no r d i n a r y 南京邮电人学顾士研究生学位论文第四章持久对象层的设计 j a v ao b j e c t ,p o j o ) 和持久对象( p e r s i s t e n to b j e c t ,p o ) 。 持久对象实际上必须对应数据库中的e n t i t y ,所以和p o j o 有所区别。比如说p o j o 是由n e w 创建,由垃圾收集器( g a r b a g ec o l l e c t i o n ,g c ) 回收。但是持久对象是i n s e r t 数据库创建,由数据库d e l e t e 删除的。持久对象的生命周期和数据库密切相关。另 外持久对象往往只能存在一个数据库c o n n e c t i o n 之中,c o n n e c t i o n 关闭以后,持久 对象就不存在了,而p o j o 只要不被g c 回收,总是存在的。由于存在诸多差别,因此 持久对象在代码上肯定和p o j o 不同,起码p 0 相对于p o j o 会增加一些用来管理数据 库e n t it y 状态的属性和方法。 持久化意味着通过手工或其它方式输入到应用中的数据,能够在应用结束运行后 依然存在,即使应用运行结束或者计算机关闭后,这些信息依然存在,不管什么样的 系统都需要数据的持久化。我们将需要持久化处理的b o 称之为p o ,当应用中的业务 对象在内存中创建后,它们不可能永远存在,在从内存中清除之前,要被持久化到关 系数据库中。 4 2 持久对象层需求说明 封装在持久层中的方法是为了实现对象的持久化,换句话说,对数据库中数据的 读、写、删除等操作是通过对持久层对象的操作实现的。简单地说,一个灵活的持久 对象层能够让业务逻辑层的设计开发人员在数据存储方式透明的情况下进行设计开 发,能够让数据库管理员在对数据库的某些属性或实现方式进行修改时不用担心会将 变化引入到用户界面层或业务逻辑层。具体地,持久对象层需要满足以下要求: 1 、支持多种持久化映射机制。为满足对多种方式存储的数据映射到持久化对象 中以方便日后可能的插入、删除和修改等操作,就需要针对不同的数据存储方式有持 久化映射机制。目前,由于关系数据库仍然占主流地位,所以o r m 持久殃射机制主 要是针对关系数据库的。 2 、实现持久对象层的完全封装。最理想的情况就是要实现对数据库中数据的插 入、删除和修改等操作,业务逻辑层只要发送相应的更新、恢复和删除的指令到持久 对象,余下的工作就完全出持久对象层实现。 3 、多线程及多事务的机制。和数据库管理系统类似,有时业务功能上需要对数 据进行批量操作,比如产生报表、批量查询,此时持久层需要支持对多对象的同时操 作即多线程机制。相应地,批量数据操作需要对事务的支持,这里提及的事务并非数 南京邮i 乜大学硕士研究生学位论文 第四章持久对象层的设计 据库设计中的事务,而是一个综合的持久对象的动作,一个事务可能有多个完成插入、 删除和修改的基本持久对象组成,事务一般是整体提交的,而且要持事务间的嵌套, 事务的生命周期可以以千分之秒,也可以是数小时、数周和数月。 4 、可扩展性。持久对象层的设计需要确保其可扩展性,即要求能够很方便地在 持久层中新增持久对象类和修改原有的类,为了达到这样的目标,持久层也要求有一 套比较规范的设计结构。 5 、代理( p r o x i e s ) 机制。在持久层对象的设计中,一般会为对象增加一个对象 标识号( o b j e c ti d ,o i d ) ,当需要以结果集的形式批量操作持久对象时,会定义一个 代理对象,代理对象包括真实对象的o i d 及其它需要操作的属性,然后就是用类似 游标的方式处理代理对象。 6 、可移植性。持久对象层实现与数据库存储机制的紧密绑定,但这种机制是跨 越各种数据库软件厂商与版本的。换言之,一个理想的持久对象是让业务逻辑层在 不知道数据具体存储介质和数据库类型的情况下能够独立设计开发。 7 、对多种结构体系、连接方式及数据库驱动的交持。一个良好性能的持久对象 需要对c s 、b s 及二者相融合等多种结构体系的支持,需要与不同的持久对象层间 实现互联,需要对不同厂商及第三方提供的数据库驱动提供支持。 4 3 持久对象层的详细设计 持久对象层作为一个独立的软件功能实体,包括各个部分,下面分别加以描述。 4 3 1 持久层整体结构 持久层的整体结构如图4 1 所示。 1 6 销母”久对象层的i 5 汁 h i i 自r l 仉jh 、i r u t i l - 1 - - r l | 、l - i ;- i - 憾j 叠_ 图4 - i 持久层整体类结构 由图4 - i 可知,持久对象层主要包括以下几种类。 l 、映射类( c l a s s m a p ) ,由一系列封装了实现对象与数据库的映射的类组成。 2 、持久支撑类( p e r s i s t e n c e m e c h a n i s m ) ,由一系列封装了实现与文件、关系数据 库、对象数据库等各种数掘存储载体相连接的类组成。对于关系数据库,持久支撑类 一般封装了各种数据驱动库,比如o d b c 、j d b c 或第三方丌发的驱动等。 3 、对象类( p e r s i s t e n c e o b j e c t ) ,封装了实现实例持久化的机制,业务控制类通过 继承持久对象类实现持久化。 4 、持久层次类( p e r s i s t e n c e c r i t e r i a ) ,这些类根掘设计定义的标准封装对批量数据 库映射类进行添加、删除、更新等操作实现。 5 、持久代理类( p e r s i s t e n c e b r o k e r ) ,处理应用与持久支撑类以及不同的持久支撑 类间的联系。 6 、持久事务类( p e r s i s t e n c e t r a n s a c t i o n ) ,在持久支撑类的基础上实现对持久层多 事务机制的支持。 1 7 南京l 郇i u 人学坝i :研究生学位论文 第四章持久对象层的设计 7 、游标( c u r s o r ) ,当需要实现对批量结果集进行操作时,这些类定义了持久层中 使用的游标,一般这些游标是与数据库中使用的游标是一一对应的。 8 、结构化查询语言( s t r u c t u r e dq u e r yl a n g u a g e ,s q l ) 表述类,由基于映射类 中封装的映射机制构造的一系列s e l e c t 、i n s e r t 、u p d a t e 、d e l e t e 方法组成,实现了类似 数据库的基本的s q l 操作。 实际上,在整个软件系统的设计与丌发中,业务控制层的丌发人员只需要关心 持久对象类、持久层次类、持久事务类及游标类这4 种对象类就可以实现实例的持久 化,其它的4 种对象类是为了实现持久化而在持久层内部实现的。整个持久层的这8 种对象类之间是有明确

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论