书籍详情
数据访问模式:面向对象应用中的数据库交互
作者:(美)Clifton Nock著;鄢爱兰,王安鹏等译;鄢爱兰、王安鹏译
出版社:中国电力出版社
出版时间:2004-06-01
ISBN:9787508321950
定价:¥38.00
购买这本书可以去
内容简介
有效且优质的数据访问代码,对于现实中任何企业应用程序的性能和适用性来说,都是至为关键的。要改进现有系统,没有哪种方式比优化数据访问代码更好了。不管什么样的数据库引擎、平台、语言或者应用程序,开发人员总是不断遇到同样的关系数据库访问难题。在本书中,CliftonNock辨别了25种已验证的解决方案,以简洁易用的形式展示了每一种解决方案。这些模式广泛地解决了各种问题,包括创建有效的数据库无关的应用程序,对用户隐藏含糊的数据库语义,加速数据库资源初始化,简化开发和维护,改进对并发和事务的支持,以及消除数据访问瓶颈。每一模式都通过带有完整注释的Java/JDBC代码实例加以说明,并使用UML图表示界面、类和关系。译者序设计面向对象的软件难,设计可复用的面向对象软件更难。:摘自《设计模式:可复用面向对象软件的基础》数据库是企业级应用系统的基石,即使最简单的桌面应用程序也经常要使用关系数据库支持数据持久性。数据访问代码的性能对整个系统往往有很大的影响。数据访问逻辑的复杂性以及标准的多样性,使这些代码经常成为设计中最困难的部分。即使不考虑代码复用和支持多种数据库平台,冗余和有缺陷的代码也很难避免。对此我有深刻的体会:精心设计的应用逻辑和数据访问细节纠缠成一团乱麻,调试和维护如同一场噩梦;不良的并发设计造成死锁,缓慢的数据库资源初始化也令用户喋喋不休;针对已有的数据库设计了系统,到头来用户却坚持要使用另一种产品。当我读到这本书的时候,不觉豁然开朗,原来数据访问代码应该是这样设计的!在设计模式大行其道的今天,这是一本适逢其会的好书。原书的作者依据多年从事数据库开发的经验,抽象出了25种常用的关系数据库访问模式,进行了详细准确的阐述。全书由导言和五部分模式组成。导言对应用程序和中间件、软件抽象、设计模式有简短而精彩的论述,并对数据访问模式的应用提供了建议。后面的每个部分都包括一组模式的详细说明和对这组模式的概述。对每个模式都体现了一种经过千锤百炼的设计的精髓,可以在许多数据访问标准和商业化产品中发现它们的遗迹。即使不将其付诸实践,您也可以从中领略到一些杰出设计思想的精妙之处。从架构师到编码人员,包括学习数据库技术的学生,都可以从本书受益。对照传统的数据库教科书,您会发现本书的独到之处。本书由鄢爱兰、王安鹏主译。参与本书翻译工作的还有谢君英、王延华、马孝荣、欧阳叙好,盛海燕和谢小花录入了本书的代码并进行了初排,在此一并感谢。由于译者水平有限,难免有错漏之处,欢迎批评指正。前言数据是构成企业基础的主要元素。会计人员要使用商业数据作出决策;生产人员和采购人员要依靠进货和订购数据调整库存;销售人员要研究客户的历史数据;执行经理则要依靠数据研究公司的管理。企业软件使这些关键的决策者能够阅读、编写和组织数据。业务应用程序中的数据访问功能对于其质量和可用性起着举足轻重的作用。开发人员必须花费很大的精力设计有效的数据访问代码,否则整个应用程序就可能运行得很慢或者容易存在缺陷。数据访问模式无论在什么样的应用领域,企业软件开发人员都要解决同样的数据访问问题。以下是设计数据访问组件时遇到的一些常见问题:●应用程序需要使用多种数据库产品。●用户界面需要隐藏晦涩的数据库语义。●数据库资源初始化非常慢。●数据访问细节使应用程序难以开发与维护。●应用程序需要缓存频繁访问的数据。●多个用户需要并发访问相同的数据。这些问题都有通用的解决方案。一些方案非常直观,已经被成千上万的开发者独立地发现。另一些则不那么明显,因为它们已经被融合在最健壮的数据访问方案中。数据访问模式描述了解决这类共同设计问题的一般策略。模式不一定要规定具体的实现,而是要描述一种有效的设计和结构,构成解决方案的基础。本书描述了专门用于关系数据访问的模式。到目前为止,关系数据库是现在企业软件所使用的最流行、经过最多实践检验的数据存储机制。其他持久性技术,如面向对象数据库和层次数据库,也正在逐渐普及。这些后备的数据库存储的数据更接近运行时的对象形式,因此更容易应用传统的面向对象模式和技术。谁应该阅读本书?本书是为负责构建数据访问软件组件的软件架构师、设计人员和工程师编写的。此外,本书的材料也适合希望了解常见数据访问问题和解决方案的学生。本书使用一般的数据库和面向对象概念和术语描述模式。读者应该对这两个领域有基本的了解。如果遇到不熟悉的术语,请参考本书最后的术语表。本书所述的模式适用于多种平台、程序设计语言和数据库。每种模式的示例代码使用Java2StandardEdition(J2SE)、Java2EnterpriseEdition(J2EE)和JavaDatabaseConnectivity(JDBC)API编写。示例代码使用StructuredQueryLanguage(SQL)语言表示数据库操作。如果读者对Java和JDBC有一些了解,则对于研究这些示例代码会有帮助,但这并不是必需的。对于不那么直观的代码都给出了注释和说明。本书是如何组织的本书是一部模式编目,详细描述了一组数据访问模式。本书根据适用性把模式组织成几个不同的部分。因为这是一本编目,所以不需要强迫自己按照顺序阅读模式的描述。如果一个模式依赖于其他模式定义的概念,则会有明确的交待。模式使用简洁的、描述性的、熟悉的名字标识。模式名非常重要,因为你可以在交谈和撰文中使用它们。将一组互相作用的类描述成资源修饰器的实例,与反复详细描述模式中的每个成分相比更加有效。本书的"绪论"说明了研究和应用数据访问模式的动机,并简要介绍了每种模式。这一章还定义了以后各章描述模式细节的形式。本书的其他部分就是模式编目,把每一类模式划分为一个部分:●第一部分,"解耦模式"描述了其他应用程序逻辑从解耦数据访问代码的模式,这些模式可以产生更清晰的应用程序代码,减少了仅和数据访问细节有关的修改造成缺陷的可能性。●第二部分,"资源模式"描述了有效管理数据库资源的模式。●第三部分,"输入/输出模式"描述了简化输入输出操作的模式,在以物理形式表示的关系数据和域对象表示之间使用一致的转换。●第四部分,"缓存模式"描述了实现战略性数据缓存的模式,解决数据访问优化和缓存开销之间的折衷问题。●第五部分,"并发模式"描述了实现并发策略的模式。总结和其他模式编目一样,本书也是不完备的。建议你调整书中的解决方案使其适应你的应用程序,并在这个过程中发现新的数据访问模式。即使你没有像本书这样正式用文档记录模式,使用和鉴别它们也是有好处的。关于本书所述的模式,如果你有什么意见或见解,我都真诚地欢迎。你可以写信请Addison-Wesley转交给我,也可以发送电子邮件至dataaccesspatterns@awl.com。
作者简介
CliftonNock是位于美国科罗拉多州丹佛市的PeopleSoft公司的高级软件架构师。他在IBM工作了5年,他的工作内容是设计编程接口,以简化对iSeries操作系统及其集成数据库的访问,他在这项工作中拥有9项美国专利。他在Minnesota大学讲授过几门编程课程,并经常出席世界级的技术会议。他拥有Minnesota大学的计算机科学硕士学位。
目录
第一部分 解耦模式 1
1. 数据模型和数据访问 2
2. 域对象与关系数据 2
3. 解耦模式 4
第1章 数据访问器 5
1.1 简述 5
1.2 背景 5
1.3 适用性 8
1.4 结构 9
1.5 交互 9
1.6 效果 10
1.7 策略 11
1.8 示例代码 12
1.9 相关模式和技术 23
第2章 主动域对象 24
2.1 简述 24
2.2 背景 24
2.3 适用性 26
2.4 结构 26
2.5 交互 27
2.6 效果 28
2.7 策略 29
2.8 示例代码 30
2.9 相关模式和技术 38
第3章 对象/关系映射 39
3.1 简述 39
3.2 背景 39
3.3 适用性 42
3.4 结构 42
3.5 交互 43
3.6 效果 43
3.7 策略 44
3.8 示例代码 46
3.9 相关模式和技术 53
第4章 层 55
4.1 简述 55
4.2 背景 55
4.3 适用性 58
4.4 结构 58
4.5 交互 59
4.6 效果 60
4.7 策略 61
4.8 示例代码 61
4.9 相关模式和技术 68
第二部分 资源模式 69
1. 资源和上下文 69
2. 资源和并发 70
3. 数据访问资源 70
4. 资源管理 71
5. 资源模式 72
第5章 资源修饰器 75
5.1 简述 75
5.2 背景 75
5.3 适用性 77
5.4 结构 77
5.5 交互 77
5.6 效果 79
5.7 策略 79
5.8 示例代码 81
5.9 相关模式和技术 85
第6章 资源池 86
6.1 简述 86
6.2 背景 86
6.3 适用性 87
6.4 结构 87
6.5 交互 88
6.6 效果 89
6.7 策略 90
6.8 示例代码 92
6.9 相关模式和技术 100
第7章 资源定时器 101
7.1 简述 101
7.2 背景 101
7.3 适用性 102
7.4 结构 103
7.5 交互 103
7.6 效果 105
7.7 策略 106
7.8 示例代码 107
7.9 相关模式和技术 116
第8章 资源描述器 117
8.1 简述 117
8.2 背景 117
8.3 适用性 119
8.4 结构 119
8.5 交互 120
8.6 效果 120
8.7 策略 120
8.8 示例代码 121
8.9 相关模式和技术 124
第9章 重试器 125
9.1 简述 125
9.2 背景 125
9.3 适用性 126
9.4 结构 126
9.5 交互 126
9.6 效果 128
9.7 策略 128
9.8 示例代码 129
9.9 相关模式和技术 134
第三部分 输入输出模式 135
1. 输入和输出操作 136
2. 标识对象 136
3. 输入输出模式 137
第10章 选择工厂 139
10.1 简述 139
10.2 背景 139
10.3 适用性 140
10.4 结构 140
10.5 交互 141
10.6 效果 141
10.7 策略 142
10.8 示例代码 142
10.9 相关模式和技术 147
第11章 域对象工厂 148
11.1 简述 148
11.2 背景 148
11.3 适用性 148
11.4 结构 149
11.5 交互 150
11.6 效果 151
11.7 策略 151
11.8 示例代码 152
11.9 相关模式和技术 156
第12章 更新工厂 157
12.1 简述 157
12.2 背景 157
12.3 适用性 158
12.4 结构 158
12.5 交互 159
12.6 效果 160
12.7 策略 160
12.8 示例代码 160
12.9 相关模式和技术 164
第13章 域对象装配器 166
13.1 描述 166
13.2 背景 166
13.3 适用性 168
13.4 结构 168
13.5 交互 169
13.6 效果 170
13.7 策略 171
13.8 示例代码 172
13.9 相关模式和技术 186
第14章 分页迭代器 187
14.1 简述 187
14.2 背景 187
14.3 适用性 188
14.4 结构 188
14.5 交互 189
14.6 效果 190
14.7 策略 191
14.8 示例代码 192
14.9 相关模式和技术 195
第四部分 缓存模式 197
1. 缓存的操作和透明性 197
2. 缓存的数据 198
3. 缓存的模式 198
第15章 缓存访问器 199
15.1 简述 199
15.2 背景 199
15.3 适用性 200
15.4 结构 200
15.5 交互 201
15.6 效果 201
15.7 策略 202
15.8 示例代码 203
15.9 相关模式和技术 205
第16章 即时缓存 207
16.1 简述 207
16.2 背景 207
16.3 适用性 207
16.4 结构 208
16.5 交互 208
16.6 效果 209
16.7 策略 210
16.8 示例代码 210
16.9 相关模式和技术 214
第17章 预填缓存 215
17.1 简述 215
17.2 背景 215
17.3 适用性 216
17.4 结构 216
17.5 交互 217
17.6 效果 217
17.7 策略 219
17.8 示例代码 219
17.9 相关模式和技术 226
第18章 缓存查找序列 227
18.1 简述 227
18.2 背景 227
18.3 适用性 229
18.4 结构 229
18.5 交互 230
18.6 效果 231
18.7 策略 231
18.8 示例代码 234
18.9 相关模式和技术 241
第19章 缓存收集器 242
19.1 简述 242
19.2 背景 242
19.3 适用性 243
19.4 结构 243
19.5 交互 244
19.6 效果 246
19.7 策略 246
19.8 示例代码 247
19.9 相关模式和技术 257
第20章 缓存复制器 258
20.1 简述 258
20.2 背景 258
20.3 适用性 259
20.4 结构 261
20.5 交互 261
20.6 效果 262
20.7 策略 263
20.8 示例代码 263
20.9 相关模式和技术 269
第21章 缓存统计 270
21.1 简述 270
21.2 背景 270
21.3 适用性 271
21.4 结构 271
21.5 交互 272
21.6 效果 272
21.7 策略 272
21.8 示例代码 272
21.9 相关模式和技术 278
第五部分 并发模式 279
1. 工作单元 279
2. 工作副本 280
3. 并发问题 280
4. 并发模式 282
第22章 事务 285
22.1 简述 285
22.2 背景 285
22.3 适用性 286
22.4 结构 287
22.5 交互 288
22.6 效果 288
22.7 策略 289
22.8 示例代码 293
22.9 相关模式和技术 295
第23章 乐观锁定 297
23.1 简述 297
23.2 背景 297
23.3 适用性 298
23.4 结构 298
23.5 交互 299
23.6 效果 299
23.7 策略 300
23.8 示例代码 301
23.9 相关模式和技术 303
第24章 悲观锁定 304
24.1 简述 304
24.2 背景 304
24.3 适用性 305
24.4 结构 306
24.5 交互 306
24.6 效果 307
24.7 策略 307
24.8 示例代码 308
24.9 相关模式和技术 311
第25章 补偿事务 312
25.1 简述 312
25.2 背景 312
25.3 适用性 314
25.4 结构 314
25.5 交互 315
25.6 效果 315
25.7 策略 316
25.8 示例代码 316
25.9 相关模式和技术 322
参考文献 323
后记 325
1. 数据模型和数据访问 2
2. 域对象与关系数据 2
3. 解耦模式 4
第1章 数据访问器 5
1.1 简述 5
1.2 背景 5
1.3 适用性 8
1.4 结构 9
1.5 交互 9
1.6 效果 10
1.7 策略 11
1.8 示例代码 12
1.9 相关模式和技术 23
第2章 主动域对象 24
2.1 简述 24
2.2 背景 24
2.3 适用性 26
2.4 结构 26
2.5 交互 27
2.6 效果 28
2.7 策略 29
2.8 示例代码 30
2.9 相关模式和技术 38
第3章 对象/关系映射 39
3.1 简述 39
3.2 背景 39
3.3 适用性 42
3.4 结构 42
3.5 交互 43
3.6 效果 43
3.7 策略 44
3.8 示例代码 46
3.9 相关模式和技术 53
第4章 层 55
4.1 简述 55
4.2 背景 55
4.3 适用性 58
4.4 结构 58
4.5 交互 59
4.6 效果 60
4.7 策略 61
4.8 示例代码 61
4.9 相关模式和技术 68
第二部分 资源模式 69
1. 资源和上下文 69
2. 资源和并发 70
3. 数据访问资源 70
4. 资源管理 71
5. 资源模式 72
第5章 资源修饰器 75
5.1 简述 75
5.2 背景 75
5.3 适用性 77
5.4 结构 77
5.5 交互 77
5.6 效果 79
5.7 策略 79
5.8 示例代码 81
5.9 相关模式和技术 85
第6章 资源池 86
6.1 简述 86
6.2 背景 86
6.3 适用性 87
6.4 结构 87
6.5 交互 88
6.6 效果 89
6.7 策略 90
6.8 示例代码 92
6.9 相关模式和技术 100
第7章 资源定时器 101
7.1 简述 101
7.2 背景 101
7.3 适用性 102
7.4 结构 103
7.5 交互 103
7.6 效果 105
7.7 策略 106
7.8 示例代码 107
7.9 相关模式和技术 116
第8章 资源描述器 117
8.1 简述 117
8.2 背景 117
8.3 适用性 119
8.4 结构 119
8.5 交互 120
8.6 效果 120
8.7 策略 120
8.8 示例代码 121
8.9 相关模式和技术 124
第9章 重试器 125
9.1 简述 125
9.2 背景 125
9.3 适用性 126
9.4 结构 126
9.5 交互 126
9.6 效果 128
9.7 策略 128
9.8 示例代码 129
9.9 相关模式和技术 134
第三部分 输入输出模式 135
1. 输入和输出操作 136
2. 标识对象 136
3. 输入输出模式 137
第10章 选择工厂 139
10.1 简述 139
10.2 背景 139
10.3 适用性 140
10.4 结构 140
10.5 交互 141
10.6 效果 141
10.7 策略 142
10.8 示例代码 142
10.9 相关模式和技术 147
第11章 域对象工厂 148
11.1 简述 148
11.2 背景 148
11.3 适用性 148
11.4 结构 149
11.5 交互 150
11.6 效果 151
11.7 策略 151
11.8 示例代码 152
11.9 相关模式和技术 156
第12章 更新工厂 157
12.1 简述 157
12.2 背景 157
12.3 适用性 158
12.4 结构 158
12.5 交互 159
12.6 效果 160
12.7 策略 160
12.8 示例代码 160
12.9 相关模式和技术 164
第13章 域对象装配器 166
13.1 描述 166
13.2 背景 166
13.3 适用性 168
13.4 结构 168
13.5 交互 169
13.6 效果 170
13.7 策略 171
13.8 示例代码 172
13.9 相关模式和技术 186
第14章 分页迭代器 187
14.1 简述 187
14.2 背景 187
14.3 适用性 188
14.4 结构 188
14.5 交互 189
14.6 效果 190
14.7 策略 191
14.8 示例代码 192
14.9 相关模式和技术 195
第四部分 缓存模式 197
1. 缓存的操作和透明性 197
2. 缓存的数据 198
3. 缓存的模式 198
第15章 缓存访问器 199
15.1 简述 199
15.2 背景 199
15.3 适用性 200
15.4 结构 200
15.5 交互 201
15.6 效果 201
15.7 策略 202
15.8 示例代码 203
15.9 相关模式和技术 205
第16章 即时缓存 207
16.1 简述 207
16.2 背景 207
16.3 适用性 207
16.4 结构 208
16.5 交互 208
16.6 效果 209
16.7 策略 210
16.8 示例代码 210
16.9 相关模式和技术 214
第17章 预填缓存 215
17.1 简述 215
17.2 背景 215
17.3 适用性 216
17.4 结构 216
17.5 交互 217
17.6 效果 217
17.7 策略 219
17.8 示例代码 219
17.9 相关模式和技术 226
第18章 缓存查找序列 227
18.1 简述 227
18.2 背景 227
18.3 适用性 229
18.4 结构 229
18.5 交互 230
18.6 效果 231
18.7 策略 231
18.8 示例代码 234
18.9 相关模式和技术 241
第19章 缓存收集器 242
19.1 简述 242
19.2 背景 242
19.3 适用性 243
19.4 结构 243
19.5 交互 244
19.6 效果 246
19.7 策略 246
19.8 示例代码 247
19.9 相关模式和技术 257
第20章 缓存复制器 258
20.1 简述 258
20.2 背景 258
20.3 适用性 259
20.4 结构 261
20.5 交互 261
20.6 效果 262
20.7 策略 263
20.8 示例代码 263
20.9 相关模式和技术 269
第21章 缓存统计 270
21.1 简述 270
21.2 背景 270
21.3 适用性 271
21.4 结构 271
21.5 交互 272
21.6 效果 272
21.7 策略 272
21.8 示例代码 272
21.9 相关模式和技术 278
第五部分 并发模式 279
1. 工作单元 279
2. 工作副本 280
3. 并发问题 280
4. 并发模式 282
第22章 事务 285
22.1 简述 285
22.2 背景 285
22.3 适用性 286
22.4 结构 287
22.5 交互 288
22.6 效果 288
22.7 策略 289
22.8 示例代码 293
22.9 相关模式和技术 295
第23章 乐观锁定 297
23.1 简述 297
23.2 背景 297
23.3 适用性 298
23.4 结构 298
23.5 交互 299
23.6 效果 299
23.7 策略 300
23.8 示例代码 301
23.9 相关模式和技术 303
第24章 悲观锁定 304
24.1 简述 304
24.2 背景 304
24.3 适用性 305
24.4 结构 306
24.5 交互 306
24.6 效果 307
24.7 策略 307
24.8 示例代码 308
24.9 相关模式和技术 311
第25章 补偿事务 312
25.1 简述 312
25.2 背景 312
25.3 适用性 314
25.4 结构 314
25.5 交互 315
25.6 效果 315
25.7 策略 316
25.8 示例代码 316
25.9 相关模式和技术 322
参考文献 323
后记 325
猜您喜欢