




已阅读5页,还剩58页未读, 继续免费阅读
(通信与信息系统专业论文)对象关系映射的硬编码方式的设计与实现.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
_ 海 师 范 人学 硕 曰1 f 究 生 学 位 论 文摘 要 摘要 随着软件的复杂度和规模不断增长和扩大,业务数据量也在不断增长,各种 商业系统对于关系数据库的依赖程度也越来越强。 由于面向对象在前台应用软件 中的广泛应用, 需要一套完善的对象关系映射机制将内存对象的数据持久化到关 系数据库中,因此对象关系映射已成为目前商业软件开发中重要的一部分。 对象关系映射的实现主要有三类方式:硬编码方式、 数据层方式和持久层方 式 不同方式有许多不同的实现方法, 各种实现的方法都 有其优点和缺点, 适用 于不用的场合。 本文提出了两种硬编码方式的对象关系映 射机制来实现数据的映 射。 第一种方法是嵌入式多 态 s q l方法, 该方法充分利用类之间的继承关系来 拆分s q l 语句, 使得冗长的s q l 语句能 够分散到类层次结构中的 各个结点中, 并利用面同对象的多态性质形成调用链, 协同完成各种数据访问操作。该方法充 分利用 了 i lt l 向对象的思想来提高代码的复用率,降低了维护代价。 第二种方法是t e m p l a t e m e t h o d , 该方法是将面向对象的t e m p l a t e m e t h o d 设 计模式运用到对象关系映射中, 来提高代码的复用率,实现统一的映射机制。两 种方法都是在代码级别上对映射代码进行有效管理的方法。 本文最后分析和讨论了两种方法在实际应用时所遇到的各种设计权衡问题, 并比较了这两种方法在遇到不同情况时的优点和缺点。 本文的各种示例均出自于上海雅运纺织化工有限公司信息管理系统的实例。 关键字:对象关系映射, o r m,硬编码,设计模式 1 . ;i :, 帅范人学硕 卜 研究生学位论文摘 要 ab s t r a c t wi t h t h e d e v e l o p m e n t o f c o m p l e x i t y a n d s c a l e o f m o d e rn s o f tw a r e , t h e b u s i n e s s d a t a h a v e g r o w n mo r e a n d m o r e . ma n y b u s i n e s s s y s t e ms a r e mo r e d e p e n d e n t o n r e l a t i o n a l d a t a b a s e . i n a c c o r d i n g t o t h e w i d e u s i n g o f o b j e c t - o r i e n t e d me t h o d i n t h e f r o n t a p p l i c a t i o n , t h e r e m u s t b e a o b j e c t - r e l a t i o n m a p p i n g m e c h a n i s m t o ma p t h e o b j e c t s i n t h e m e m o r y t o t h e p e r s i s t e n t r e l a t i o n a l d a t a b a s e . s o o b j e c t - r e l a t i o n m a p p i n g h a s b e e n a n i m p o rt a n t p a rt o f b u s i n e s s s o f t w a r e s . t h e r e a r e t h r e e b a s i c s o l u t i o n s o f o r m: h a r d - c o d i n g , d a t a l a y e r , r o b u s t p e r s i s t e n t l a y e r . ma n y me t h o d s c a n i m p l e m e n t t h e s e s u l u t i o n s . a l l m e t h o d s h a v e d i f f e r e n t p r o s a n d c o n s , a n d s h o u l d b e u s e d i n d i ff e r e n t s i t u a t i o n s . i n t h i s p a p e r , i w i l l f o r w a r d t w o h a r d - c o d i n g me t h o d s t o i m p l e m e n t o b j e c t - r e l a t i o n m a p p i n g . e m b e d d e d p o l y m o r p h i c s q l me t h o d ( e p s ) , f o r w a r d e d i n t h i s p a p e r , t a k e f u l l a d v a n t a g e o f i n h e r i t a n c e o f c l a s s e s t o d i v i d e l o n g s q l s t a t e me n t . t h e d e v i d e d s q l s t a t e me n t s w i l l b e d e p l o y e d t o n o d e s o f t h e w h o l e c l a s s h i e r a r c h y . c a l l l i n k s w i l l b e m a d e b y p o l y m o r p h i s m o f 0 0 p r o p e rt y t o c o m p l e t e v a r i o u s o p e r a t i o n s o f d a t a b a s e a c c e s s i n c o o r d i n a t i o n . t h i s m e t h o d u s e t h e t h o u g h t o f 0 0 t o i m p r o v e t h e r e u s a b i l i t y o f c o d e a n d r e d u c e t h e e ff o r t o f m a i n t a i n a n c e . a n o t h e r m e t h o d , t e m p l a t e m e t h o d , u s e t h e t e m p l a t e m e t h o d o f 0 0 d e s i g n p a t t e r n t o i m p l e m e n t o r m. t h i s me t h o d c a n a l s o i m p o v e t h e r e s u a b i l i t y o f c o d e a n d a c h i e v e u n i f i e d me c h a n i s m. t h e s e t w o a r e a l l m e t h o d s o f e ff e c t i v e m a n a g e me n t o f c o d e . i n t h e l a s t o f t h i s p a p e r , i w i l l d i s c u s s a n d a n a l y s e s o m e d e s i g n p r o b l e ms e n c o u n t e r e d i n p r a c t i c e . a l l t h e e x a m p l e s i n t h i s p a p e r a r e c o mi n g f r o m ma n a g e m e n t i n f o r m a t i o n s y s t e m o f a r g u s ( s h a n g h a i ) t e x t i l e c h e m i c a l s c o . , l t d k e y wo r d s : o b j e c t r e l a t i o n ma p p i n g , o r m, h a r d - c o d i n g , d e s i g n p a t t e r n 上海师范大学硕士研究生学位论文 第一章 引言 第一章引言 1 . 1 背景 各种应用软件的开发都不可避免要使用到内 存数据的持久化( p e r s is t e n c e ) , 使各种 数据 能够长 时间保存并持续使用。现今, 面向 对象 ( o b j e c t - o r i e n t e d , 0 0 ) 的开发方法已成 为了 软件开发的主流。 随着软件复杂度和规模的增加和扩大, 出于软件的可重用性和可维护性的 考虑,各种面向对象的持久化方法也随之产生。 持久化最基本的 作用如图 1 所示。 利用持久化设备 ( p e r s i s t e n c e f a c i li t y )使得各种对 象在不同的进程中能够持续使用。 进 程1 进程2 保存对象加载对象 时间 持久化设备 图 1 持久化作用 常用的持久化设备包括: 结构化文件、 关系型 数据库、 面向 对象数据库、 o / r数据库( 关 系7 数据库十 对象访问 层) 等口对于不同的持久化设备各种持久化方法有着不同的持久化方 法 。 对 象关 系 映 射( o b j e c t - r e la t i o n m a p p i n g , o r m ) 就 是 其 中 的 一 种 方 法。 o r m是 内 存中 0 0方法所使用的各种对 象在后台关系型数据库进行持久化的 方法。 一个完整的or m方案,必须满足以下要求: 令 支 持 对 象 的c r u d 操 作 ( c r e a t e , r e t r i e v e , u p d a te , d e l e t e ) 令 支 持 多 数 据源( m u lt ip l e d a t a s o u r c e ) 令支持事务 ( t r a n s a c t i o n ) 令 支持数据同步 ( c o n c u r r e n c y ) 令 支持延 迟加载 ( d e l a y l o a d i n g ) + 支持直 接操作s q l 语句 今 支持对 象查n语言 ( o b j e c t q u e ry l a n g u a g e , o q l ) 目 前o r m方 案 基 本 可以 分 为三 类 1 4 1 , i 硬编码 方式 ( h a r d c o d in g ) 2 数据层式 ( d a ta l a y e r ) 3 持久 层 式 ( p e r s i s t e n c e l a y e r ) 各种or m 方案在不同的应用环境中有 自己的优点和缺点。 本文将提出两种 有效的硬编码方式的方案: 嵌入式多 态 s q l方法和 t e m p la t e m e t h o d 方法。通过对这两种方案的论述和比较引出对各种设计权衡的讨论。 卜 海师范大学硕士研究生学位论文 第一塞 引言 1 . 2论文主要研究内 容及意义 作者于2 0 0 2 年8 月至2 0 0 4 年8 月参与了 上海雅运纺织化工有限公司 信息管理系统的 开 发。 本文提出的两种方法的都为该项目 中总结得出。 本课 题主要研究以下内 容: i 使用t e m p la t e me t h o d 设计模式实现硬编码方式的o r m。论述与分 析如何利用特 定设计模式实现o r m,以 提高 代码可读性及可维护性,以 及该方法在卖际应用中 的优缺点: 2 提出嵌入式多态s q l 方法实 现o r m, 论述与分析该方法调用机制、 执行效率、 代 码复 用性等特点,并结合具体实例讨论该方法的各种优缺点: 3 结合实际系统,分析、比 较两种方法在设计时遇到的权衡问 题, 包括o id映 射问 题、 完整性约束问 题、 执行效率问 题、 数据封装问题、 构造函 数问题、 存储过程和 d i r e c t s q l 、 类到 表的 映 射 模 式。 由于软件的 复杂度 越来越高, 对于代码的可重用性、 可维护性和可扩展性的要求也越来 越高。在这种情况下, 本文提出了 对硬编码方式的研究有如下几点意义: 第一:目 前对于o r m的研究主要集中在数据层式与持久层式的方法,同 时也产生了许 多可运行的组件。 但是对硬编码方式的研究主要集中在利用自 动化工具根据数据库构架 ( s c h e m a ) 来白 动生成s q l 语句。 本文所研究目 的在于探讨两种在硬编码方式下管理s q l 语句的方法来提高代码的可重用性以及可维护性。 第二:本文讨论在对两种 o r m 方案进行论述后,根据在实际系统中运用的效果,整理 并分析了所遇到相关设计权衡问题。对于其他项 目的开发有一宁参考作用。 1 . 3论文的主要工作及章节安 排 论文 卜 作主要分为四个阶段,大致如 下: 第一, 资 料收集阶段。 本人阅 读了国内外相关的 论文和书籍近百篇, 较深入 地了解了对 象关系映射方面的情况。 第二, 映射机制思想确立阶段。 在分析、 比较了现有的各种映射机制之后, 确定了本文 提出的两种方法的思想。 第二, 评价阶段。 在确立了本文的方 法后, 还结合了本人参与的项目 对两种方法的实际 运用做出分析,讨论了在不同环境下遇到的设计问题。 第四, 总结阶段。 分析、比 较了各 种o r m方法之后, 本文针对开发中的实际情况,总 结了本文方法的 使用范围以及将来的 研究方向等内容。 本论文共分五个章节,各个章节的安 排如下: 第一章是全文的概述,介绍了本论文的撰写背景和意义。 第二章介绍了对象关系映射的概念,实现一个完整的or m所必要的需求,以及目前实 现 or m 的各种方案。 第三章介绍了 本文提出的嵌入式多态s q l 方法的思想、 具体的实现方法以 及各种特点. 第四章介绍了 文本 提出的t e m p la t e m e t h o d 方法的思想、 具体的实现方法以 及各种 特点。 第五章结合了 实际 应用经验讨论本文提出的两 种方法所遇到的 一些设计问题。 第六章详细描述本文提出的方法在具体实例中的应用。 上海帅范大学硕士研究生学位论文 第二章 概述 第二章 概述 2 . 1 o rm介绍 现代软件开发 方法主要趋向于面向 对象的方法, 尤其是各种商业软 件的开发。 利用面向 对象方法可以提高代码的可复用性、 可扩展性、可维护性。在前台应用程序使用面向对象方 法开发的同 时, 需要将内存中的 对象保存到后台持久化设备里, 便于程序重新启动后能 够再 从持久化设备里取出 数据,在内存中恢复原有的对象。 后台持久化设备包括:结 构化文件、 关系型数据库、面向对象数据库、 o / r数据库 关系型数据库 + 对象访问 层) 等。在商业信息 系统中, 当前使用最多的 是关系型数据库。 由 于关系型数据库并不是面向对象的, 因此需 要 一 种系统的方法, 使面向对象方法中 使用的各种对象轻松地映射到后台 的关系型数据库, 这 种方法就称为对象关系映射。 2 . 2实 现o r m必要的需求 实现一个完整的 o r m,必须满足以下要求: .支持对象的 c r u d操作 . 支持多数据源 ( m u lt ip l e d a t a s o u r c e ) .支持事务 ( t r a n s a c t i o n ) . 支持数据同步 ( c o n c u r r e n c y ) . 支持延迟加载 ( d e l a y l o a d i n g ) . 支持直接操作s q l 语句 . 支持对象查询语言 ( o b j e c t q u e ry l a n g u a g e , o q l ) c r u d操作 ( c r e a t e r e t r i e v e u p d a t e d e l e t e )是前台 应用程 序与后台 数据库进行交互的 最基木的操作。因此 o r m 的实现必须提供一种简洁的方法向前台应用程序提供 c r u d服 务 对于大刑应用程序,数据量可能非常大,因此后台数据库可能有儿个,并且这些数据库 可能部署在网 络上的 不同 机器上, 甚至可能使用不同的数据库管理系 统 ( d b m s ) . o r m的 实现需要能够支持不同的 数据源, 向应用程序提供一 种统一的 访问方法来对这些数据源进行 访问。 事务是用来保证一个或多个数据源的系统状态的完赘性。事务有四个基本要求i i i ( a c i d ) : 原子性( a t o m i c i ty ) 、 一致性( c o n s i s t e n c y ) , 隔离 性( i s o l a t i o n ) 、 持续性( d u r a b i l it y ) . 事务对于商业信息系统尤为重要。 数据同步需要解决数据更新时各种冲突问 题。 在多个客户程序对数据进行更新时会出 现 如 卜 问题:丢失修改、不可重复读、读脏数据。解决数据同步问题可以对数据进行加锁。一 般 可 以 使 用 两 种 锁 , ; 悲 观 锁 ( p e s s i m is t i c l o c k i n g ) 、 乐 观 锁 ( o p t i m i s t ic l o c k i n g ) 。 对 数 据 加悲观锁后,防止其他客户对该数据进行读写,保证同一时刻只有一个客户操作该数据。 悲 观 锁人多依赖数据库提供的锁机制来实现。 对于较多长事务的应用情况下, 容易造成事务阻 塞的现象,所以较少使用。 在对数据加乐观锁后,允许其他客户对数据进行读写,在数据写 入时, 对原有数据进行比较,只有在该数据未被修改过的情况下才能写入。乐观锁依靠数据 的 版木 来 实 现 。一 般 乐 观 锁 有3 中 实 现 方 法 d i : 时 间 戳 ( t i m e s t a m p ) 、 比 较 所有 字 段、 比 较修改过的字段。 对于一个比较复杂的对象, 其有些属性也是另一个对象。 在从数据库中取出数据实例化 该对象时, 可能不是所有的属性都会用的到。 所以为了提高对象在内存中加载的效率, o r m 的实 现必 须提供延迟加载的功能, 使得对象尽快在内 存中实例 化, 在实际需要用到该对象的 属性时才对这些属性 进行加载。 延迟加载同 时降低了前台应用程序与后台数据库的数据交 换,若应月 j 程序与数据库在不同机器上,可以减小网络的负担。 上海帅范大学硕士研究生学位论文 第二章 概述 第二章 概述 2 . 1 o rm介绍 现代软件开发 方法主要趋向于面向 对象的方法, 尤其是各种商业软 件的开发。 利用面向 对象方法可以提高代码的可复用性、 可扩展性、可维护性。在前台应用程序使用面向对象方 法开发的同 时, 需要将内存中的 对象保存到后台持久化设备里, 便于程序重新启动后能 够再 从持久化设备里取出 数据,在内存中恢复原有的对象。 后台持久化设备包括:结 构化文件、 关系型数据库、面向对象数据库、 o / r数据库 关系型数据库 + 对象访问 层) 等。在商业信息 系统中, 当前使用最多的 是关系型数据库。 由 于关系型数据库并不是面向对象的, 因此需 要 一 种系统的方法, 使面向对象方法中 使用的各种对象轻松地映射到后台 的关系型数据库, 这 种方法就称为对象关系映射。 2 . 2实 现o r m必要的需求 实现一个完整的 o r m,必须满足以下要求: .支持对象的 c r u d操作 . 支持多数据源 ( m u lt ip l e d a t a s o u r c e ) .支持事务 ( t r a n s a c t i o n ) . 支持数据同步 ( c o n c u r r e n c y ) . 支持延迟加载 ( d e l a y l o a d i n g ) . 支持直接操作s q l 语句 . 支持对象查询语言 ( o b j e c t q u e ry l a n g u a g e , o q l ) c r u d操作 ( c r e a t e r e t r i e v e u p d a t e d e l e t e )是前台 应用程 序与后台 数据库进行交互的 最基木的操作。因此 o r m 的实现必须提供一种简洁的方法向前台应用程序提供 c r u d服 务 对于大刑应用程序,数据量可能非常大,因此后台数据库可能有儿个,并且这些数据库 可能部署在网 络上的 不同 机器上, 甚至可能使用不同的数据库管理系 统 ( d b m s ) . o r m的 实现需要能够支持不同的 数据源, 向应用程序提供一 种统一的 访问方法来对这些数据源进行 访问。 事务是用来保证一个或多个数据源的系统状态的完赘性。事务有四个基本要求i i i ( a c i d ) : 原子性( a t o m i c i ty ) 、 一致性( c o n s i s t e n c y ) , 隔离 性( i s o l a t i o n ) 、 持续性( d u r a b i l it y ) . 事务对于商业信息系统尤为重要。 数据同步需要解决数据更新时各种冲突问 题。 在多个客户程序对数据进行更新时会出 现 如 卜 问题:丢失修改、不可重复读、读脏数据。解决数据同步问题可以对数据进行加锁。一 般 可 以 使 用 两 种 锁 , ; 悲 观 锁 ( p e s s i m is t i c l o c k i n g ) 、 乐 观 锁 ( o p t i m i s t ic l o c k i n g ) 。 对 数 据 加悲观锁后,防止其他客户对该数据进行读写,保证同一时刻只有一个客户操作该数据。 悲 观 锁人多依赖数据库提供的锁机制来实现。 对于较多长事务的应用情况下, 容易造成事务阻 塞的现象,所以较少使用。 在对数据加乐观锁后,允许其他客户对数据进行读写,在数据写 入时, 对原有数据进行比较,只有在该数据未被修改过的情况下才能写入。乐观锁依靠数据 的 版木 来 实 现 。一 般 乐 观 锁 有3 中 实 现 方 法 d i : 时 间 戳 ( t i m e s t a m p ) 、 比 较 所有 字 段、 比 较修改过的字段。 对于一个比较复杂的对象, 其有些属性也是另一个对象。 在从数据库中取出数据实例化 该对象时, 可能不是所有的属性都会用的到。 所以为了提高对象在内存中加载的效率, o r m 的实 现必 须提供延迟加载的功能, 使得对象尽快在内 存中实例 化, 在实际需要用到该对象的 属性时才对这些属性 进行加载。 延迟加载同 时降低了前台应用程序与后台数据库的数据交 换,若应月 j 程序与数据库在不同机器上,可以减小网络的负担。 1 - 海帅范人学硕士研究生学位论文第 二 章概述 有时处于效率的考虑, 或者对于复杂的操作, 需要绕过o r m的映射机制直接对数据库 提交s q l语句进行操作。o r m作为应用程序与数据库的中间 层, 应该支持直接提交 s q l 语句的接口,方 便客户程序操作。 o q l是与s q l语法类似的一种对象查询 语言。使用o q l 可以 通过一定查询语句直接 返问对象或对象集合。 2 . 3实现o r m的各种方案 o r m有 许多 不同的实 现方法, 各种方法在不同方面都有不同 的优点和缺点。目 前使用 比 较多 的方法有 如下三种 l . i 硬编码方式:直接将s q l 语句嵌入到业务类中: 2 数据层:抽象出数据层,将s q l 语句集中到数据类中, 并与业务类对应; 阴持久 层:建立一个持久层,使其自 动完成业务对象到数据库的映 射。 硬编码方式 方法如图 2所示。硬编码方式的方法一般有两种表现形式: 第一,将对象 的保存、修改、 删除、获 取操作的s q l语句直接写 入前台应用程序中;第二, 将各种操作 写入后台数据库的 存储过程中,前台应用程序调用存储过程并 传入参数,例 如文献 1 0 中 前台使用d a t a s e t 获取参数后, 传递到后台 存储过程中。 该方法比 较适合于小型项目 ,即 业 务类一般在 2 0 -3 0个左右的项 目。该方法的优点是结构简单,运行效率高,因为前台类结 钩 。 后台数据库之间没有 其他中间层。 正因为如此, 一旦数据库结构有所变化 也会直接导致 类结构中的 s q l语句有 变化,并且必须重新编译。该方案的扩展性比 较差。目 前该方案的 具体方法一般都是根据实 际需 求直接编写s q l语句进行调用, 没有比 较系统的方法来实现 o r m。本文将提出的两种具体方法都属于 硬编码方式,这两种方法都能比较有效提高 代码 的复用性和可维护性。 目目 目 sql . -中 目 目 r db dom ai n cl asses 图 2硬编码方式o r m 数 据层方法如图 3所示。数据层的 方法把原先硬编码方式中嵌入到业务类中的数据库 操作集中到相对应的 数据类中, 形成一个在应用程序和数据库之间的数据访问 层。 这种方法 使得数据库结构发生变化时不会影响前台业务层,只需修改相应的数据访问类即可。 这样就 保证了业务与数据访问分离, 大大提高软件的可扩展性和可维护性。 但这个方法主要的缺点 是软件的层次变得复杂, 而且每个业务类基本要对应一个数据访问类, 使得整个结构中类的 数量大人增加, 井且由于多了一层, 使其执行效率 也有所降低。 同 样, 数据层的方法也 可以 有两种形式,即直接将 s q l语句嵌 入数 据层中和将各命令放在数据库的存储过程中。n e t f r a m e w o r k 中s t r o n g ly 升 p e d d a t a s e t 方 法 o l z 了 使 用 数 据层 方 法 的o r m . 1 - 海帅范人学硕士研究生学位论文第 二 章概述 有时处于效率的考虑, 或者对于复杂的操作, 需要绕过o r m的映射机制直接对数据库 提交s q l语句进行操作。o r m作为应用程序与数据库的中间 层, 应该支持直接提交 s q l 语句的接口,方 便客户程序操作。 o q l是与s q l语法类似的一种对象查询 语言。使用o q l 可以 通过一定查询语句直接 返问对象或对象集合。 2 . 3实现o r m的各种方案 o r m有 许多 不同的实 现方法, 各种方法在不同方面都有不同 的优点和缺点。目 前使用 比 较多 的方法有 如下三种 l . i 硬编码方式:直接将s q l 语句嵌入到业务类中: 2 数据层:抽象出数据层,将s q l 语句集中到数据类中, 并与业务类对应; 阴持久 层:建立一个持久层,使其自 动完成业务对象到数据库的映 射。 硬编码方式 方法如图 2所示。硬编码方式的方法一般有两种表现形式: 第一,将对象 的保存、修改、 删除、获 取操作的s q l语句直接写 入前台应用程序中;第二, 将各种操作 写入后台数据库的 存储过程中,前台应用程序调用存储过程并 传入参数,例 如文献 1 0 中 前台使用d a t a s e t 获取参数后, 传递到后台 存储过程中。 该方法比 较适合于小型项目 ,即 业 务类一般在 2 0 -3 0个左右的项 目。该方法的优点是结构简单,运行效率高,因为前台类结 钩 。 后台数据库之间没有 其他中间层。 正因为如此, 一旦数据库结构有所变化 也会直接导致 类结构中的 s q l语句有 变化,并且必须重新编译。该方案的扩展性比 较差。目 前该方案的 具体方法一般都是根据实 际需 求直接编写s q l语句进行调用, 没有比 较系统的方法来实现 o r m。本文将提出的两种具体方法都属于 硬编码方式,这两种方法都能比较有效提高 代码 的复用性和可维护性。 目目 目 sql . -中 目 目 r db dom ai n cl asses 图 2硬编码方式o r m 数 据层方法如图 3所示。数据层的 方法把原先硬编码方式中嵌入到业务类中的数据库 操作集中到相对应的 数据类中, 形成一个在应用程序和数据库之间的数据访问 层。 这种方法 使得数据库结构发生变化时不会影响前台业务层,只需修改相应的数据访问类即可。 这样就 保证了业务与数据访问分离, 大大提高软件的可扩展性和可维护性。 但这个方法主要的缺点 是软件的层次变得复杂, 而且每个业务类基本要对应一个数据访问类, 使得整个结构中类的 数量大人增加, 井且由于多了一层, 使其执行效率 也有所降低。 同 样, 数据层的方法也 可以 有两种形式,即直接将 s q l语句嵌 入数 据层中和将各命令放在数据库的存储过程中。n e t f r a m e w o r k 中s t r o n g ly 升 p e d d a t a s e t 方 法 o l z 了 使 用 数 据层 方 法 的o r m . 卜 海师范大学硕士研究生学位论文第二章 概述 目目 目 叫 睁 , 卜 目 目 目 目 _ 目s o l 11110 一 r d b 门 目 目一 domai n cl asses da t a cl asses 图 3数据层 o r a l 对于硬编码方式和数据层式两种方法的两种形式. 本文建议使用第一种形式,即将对象 的c r u d ( c r e a t e r e t r i v e u p d a t e d e l e t e ) 操 作 都嵌 入 到 前台 应 用 程 序中 。 虽 然 利 用 存储 过 程 可以加快命令的 执行速度, 但是由于 存储过程没有层次管理, 所以对于 有大量业务类或数 据 访问类的程序时,可能使存储过程的数量大大增加,其可维护性变的相当差。嵌入到应用程 序的方式可以 解决维 护问 题,但是执行效率低.并且在开发时s q l语句中的错误也能 够通 过编译,使得开发难度有所增加。 持久层方法如图 4所示。持久层的方法与数据层的方法类似,也是在前台应用程序和 后台数据库中插入一层。 但插入的持久层一般是使用反射 r e fl e c t i o n )机制或配置文件 ( 如 。 n 的 完成 o r m。持久层的特点是当业务层的类或者数据库的结构发生改变时,只需重新 配置持久层,而不需要对持久层进行修改,也不用重新编译。持久层的设计比较复杂,并且 运行效率 较低,但维护代价低,比 较适合 l o o个业务类以 上的大型系统。 s c o t t w . a m b l e r 的白皮书s 1 中详细论述了持久层方法的设计。x x m m .n e t 组件 6 1 使用 c # 实现了在n e t f r a m e w o r k卜 的持久层, 该组件使用x m l 配置文件自 动生成s q l命令来支持对象持久化 所 需要的c r u d操作。而g r o v e 组件19 1 则 使用了反射机制来完成映射。 目目 曰_ _r o b u s t s q l二 二 二 匀 _ u f p e r s i s t e n c e r d b i 日 目l a y e 一 dom ai n cl asses 图 4持久层 o r 1 1 上海师范大学硕士研究生学位论文第二章 概述 2 . 4三种方案比较 上述的三种实 现 o r m的方案在不同的应用场合有着不同的 优缺点, 表 1 列出了 对这三 种方案的汇总比较。 表 1三种 o r m 实现方案的比较 比较因素 硬 编码 方 式 数 据层 方 式 持久层方式 适用项日规模 小型 小型或中型大型 结构复杂度简单较 复杂简单 执行效率高高低 开发效率低 低高 扩展性差一般好 可维护性差 一般好 卜 海师范大学硕士研究生学位论文第三章 嵌入式多态 s q l方法实现 o r m 第 三章嵌入式多 态 s q l 方法实现o r m 3 . 1基本思想 本文提出的嵌入式多态s q l 方法利用类之间的 继承关系来拆分s q l 语句, 使得冗长的 s q l语句分散到类层次 结构中的各个结点中,并利用面向对象的多态性质形成调用链,协 同完成各种数据访问操作。 s q l语句 拆分以 属性的实际归属为依据,各个类只负责映射自己的属性. 对于通过继 承得到的属性则由基类负责处理。 3 2类层次结构以 及映 射表结构 以订单为例。首先建立订单相关的类层次结构, sh 旧已t + s n + s t a t u s +a p p ly p e r s o n + a p p n d a t e +c re a t e ( in s p: s g is p ) +u p d a t e( in s p : s g iss p ) +d e le t e ( n s p: s g is p ) +f iilo b j e c t ( n d r : d a t a r o w ) 如图 5 所示。 . + p r o d u c t + c r e a t e ( ) +u p d a t e ) 丰 d e le te ( )f illo bje c t 一 卒个 or d er s he eto r de r i t e m + v e n d o r +o r d e rt y p e + p l a 仁 e + g e t i n s ta n c e、 +c re a t e ) +u p d a t e ) +比le t e() +f illo b j e c t ) it e ms 月卜一一) + ord e r s h e e t s n + p r ic e + qu a n t it y 土 玉e t i n s t a n c e ( 1 + u p d a t e ) 十 d e le t e) + c r e a t e ) + f illo b j e c t ( ) 图 5订单相关类层次结构 订单 ( o r d e r s h e e t ) 与订单项 ( o r d e r i t e m) 分别从抽象类单据 ( s h e e t ) 和产品项 ( i t e m ) 继承a o r d e r s h e e t 与o r d e r l t e m之间存在一对多的 复合关联。 为求简洁, 类结构中仅列出s h e e t 类各 方法的参数,其他各类的参数与之相似。参数中s g i s p 用于控制事务、执行s q l语句 的辅助类.在同一个s g i s p 实例下提交的s q l语句保证在同一事务f 执行。d a t a r o w代表 一条数据记 录。 卜 海师范大学硕士研究生学位论文第三章 嵌入式多态 s q l方法实现 o r m 第 三章嵌入式多 态 s q l 方法实现o r m 3 . 1基本思想 本文提出的嵌入式多态s q l 方法利用类之间的 继承关系来拆分s q l 语句, 使得冗长的 s q l语句分散到类层次 结构中的各个结点中,并利用面向对象的多态性质形成调用链,协 同完成各种数据访问操作。 s q l语句 拆分以 属性的实际归属为依据,各个类只负责映射自己的属性. 对于通过继 承得到的属性则由基类负责处理。 3 2类层次结构以 及映 射表结构 以订单为例。首先建立订单相关的类层次结构, sh 旧已t + s n + s t a t u s +a p p ly p e r s o n + a p p n d a t e +c re a t e ( in s p: s g is p ) +u p d a t e( in s p : s g iss p ) +d e le t e ( n s p: s g is p ) +f iilo b j e c t ( n d r : d a t a r o w ) 如图 5 所示。 . + p r o d u c t + c r e a t e ( ) +u p d a t e ) 丰 d e le te ( )f illo bje c t 一 卒个 or d er s he eto r de r i t e m + v e n d o r +o r d e rt y p e + p l a 仁 e + g e t i n s ta n c e、 +c re a t e ) +u p d a t e ) +比le t e() +f illo b j e c t ) it e ms 月卜一一) + ord e r s h e e t s n + p r ic e + qu a n t it y 土 玉e t i n s t a n c e ( 1 + u p d a t e ) 十 d e le t e) + c r e a t e ) + f illo b j e c t ( ) 图 5订单相关类层次结构 订单 ( o r d e r s h e e t ) 与订单项 ( o r d e r i t e m) 分别从抽象类单据 ( s h e e t ) 和产品项 ( i t e m ) 继承a o r d e r s h e e t 与o r d e r l t e m之间存在一对多的 复合关联。 为求简洁, 类结构中仅列出s h e e t 类各 方法的参数,其他各类的参数与之相似。参数中s g i s p 用于控制事务、执行s q l语句 的辅助类.在同一个s g i s p 实例下提交的s q l语句保证在同一事务f 执行。d a t a r o w代表 一条数据记 录。 卜 海师范大学硕士研究生学位论文第三章 嵌入式多态 s q l方法实现 o r n 与类层次结构所对应的表结构如图 6 所示。 - t a 川 e - or d er i t e m 枯 s t a t u s u a p p ly p e rs o n 时a p p ty d a t e 目v e n d o r 闪o r d e r t y p e o f 一 p l a c e - id e n t i fy in g r e la ti o n s h i p ; i + or d e r i t e m 护 k驯 p k ro d u c t i d t j p r ic e t iq u a n t it y 图 6订单映射表结构 该图未采用e r 模型进行描述, 而使用u ml 的数据建模方法表示。 表使用型别18 1 为t a b l e 的类表示。 p k表示主键, n表示该字段可以为空。 由于嵌入式多 态s q l方法的需要, 所有 的字段 除了主键外) 都 必须可以为空。 本方法采用单表映射 ( 详见5 . 7 ) , 为了 方便对象的 映 射 , 各 表名 与 类 名 保 持 一 致。 o r d e r s h e e t 表 与o r d e r l t e m 表 之间 使 用i d e n t i f y i n g r e l a t i n s h i p l l 4 ) 来对应类层次结构中的聚合关联。 3 .3 对象的 c r u d操作 本文将使用调用链来描述嵌入式多态s q l方法中c r u d操作的实际调用情况。 调用链 是一个对象内部各个被调用的方法 ( 子类方法或基类方法 )的顺序。 在 嵌 入 式 多 态s q l 方 法中 , u p d a t e 的 操作 是 核 心 操作 。 所以 先以o r d e r s h e e t 的u p d a t e 操作为例,再引入 其他操作的讨论。 对于单 个对象的u p d a te 操 作,其调用链如图 7 所示。 : a p p lic a t io n: q r d e r s h e e t: $ h e e t u p d a t e ( s p u p d a t e ord e r s h e e t s e t v e n d o r = v e n d e r, o r d e r t y p e = o r d e rt y p e p la c e = p la c e w h e r e s n = cob s n u p d a t e ord e rs h e e t s e t s t a t u s = s t a t u s , a p p ly一 p e r s o n 于 (d p e r s o n , a p p ly一 d a t e = 回d a t e w h e r e s n = s n 图 7 u p d a t e 调用链 注 : 为了 方 面 描述 调 用 链 , 本 文 使 用u m l的 顺 序 图 ( s e q u e n c e d i a g r a m ) 8 l , 但 这 些 顺序图在语义有所变化, 顺序图描述的是各个对象之间的协作, 每条泳道 ( s w i m l i n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 江苏省无锡市阴山中学2024-2025学年初三考前适应性训练考试(三)物理试题试卷含解析
- 郑州科技学院《锅炉原理》2023-2024学年第二学期期末试卷
- 新疆轻工职业技术学院《新闻采编实务》2023-2024学年第二学期期末试卷
- 新疆维吾尔自治区轮台县第二中学2025年初三3月测试(线上)语文试题含解析
- 柳州城市职业学院《歌曲写作与分析》2023-2024学年第二学期期末试卷
- 宁夏职业技术学院《统计建模与数据分析》2023-2024学年第一学期期末试卷
- 中学2025届高三第二学期第一次四校联考生物试题含解析
- 长治市潞城市2024-2025学年数学五年级第二学期期末统考试题含答案
- 湖南省长沙市XX中学2025年初三下学期第三次模拟考试(期中)英语试题含答案
- 护理员消毒隔离知识培训
- (三诊)绵阳市高中2022级高三第三次诊断性考试 历史试卷A卷(含答案)
- 山东省高中名校2025届高三4月校际联合检测大联考生物试题及答案
- 2025年中铁快运股份有限公司招聘(98人)笔试参考题库附带答案详解
- 2025年武汉数学四调试题及答案
- 职业病防护设施与个体防护用品的使用和维护
- 绿化养护服务投标方案(技术标)
- 2024年郑州信息科技职业学院单招职业适应性测试题库学生专用
- 中国纺织文化智慧树知到期末考试答案2024年
- TB-T 3356-2021铁路隧道锚杆-PDF解密
- (正式版)HGT 6313-2024 化工园区智慧化评价导则
- 偶像之路表格
评论
0/150
提交评论