有效且优质的数据访问代码,对于现实中任何企业应用程序的性能和适用性来说,都是至为关键的。要改进现有系统,没有哪种方式比优化数据访问代码更好了。不管什么样的数据库引擎、平台、语言或者应用程序,开发人员总是不断遇到同样的关系数据库访问难题。在本书中,Clifton Nock辨别了25种已验证的解决方案,以简洁易用的形式展示了每一种解决方案。
\r\n 这些模式广泛地解决了各种问题,包括创建有效的数据库无关的应用程序,对用户隐藏含糊的数据库语义,加速数据库资源初始化,简化开发和维护,改进对并发和事务的支持, 以及消除数据访问瓶颈。
\r\n 每一模式都通过带有完整注释的Java/JDBC代码实例加以说明,并使用UML图表示界面、类和关系。
\r\n · 解耦模式:通过从其他应用逻辑中解耦数据访问代码,构建更简洁更可靠的系统。
\r\n · 资源模式:更加有效地管理关系数据库资源。
\r\n · 输入/输出模式:通过在“物理”关系数据和该数据的域对象表示之间进行一致地转换,从而简化I/O操作。
\r\n · 缓存模式:使用缓存策略,使数据访问优化和缓存开销之间的权衡达到最优。
\r\n · 并发模式:更高效而可靠地实现并发和事务。
\r\n 本书揭示了一些以前只用于最健壮的数据访问解决方案的技术,从而使这些技术能够被每个软件开发人员、架构师和设计师使用。
\r\n
\r\n
目录\r\n译 者 序\r\n前 言致 谢\r\n绪 论\r\n第一部分 解耦模式 \r\n 1. 数据模型和数据访问\r\n 2. 域对象与关系数据 \r\n 3. 解耦模式 \r\n 第1章 数据访问器 \r\n 1.1 简述 \r\n 1.2 背景 \r\n 1.3 适用性 \r\n 1.4 结构 \r\n 1.5 交 互 \r\n 1.6 效果 \r\n 1.7 策略 \r\n 1.8 示例代码 \r\n 1.9 相关模式和技术 \r\n 第2章 主动域对象 \r\n 2.1 简述 \r\n 2.2 背景 \r\n 2.3 适用性 \r\n 2.4 结构 \r\n 2.5 交互 \r\n 2.6 效果 \r\n 2.7 策略 \r\n 2.8 示例代码 \r\n 2.9 相关模式和技术 \r\n 第3章 对象/关系映射 \r\n 3.1 简述 \r\n 3.2 背景 \r\n 3.3 适用性 \r\n 3.4 结 构 \r\n 3.5 交互 \r\n 3.6 效果 \r\n 3.7 策略 \r\n 3.8 示例代码 \r\n 3.9 相关模式和技术 \r\n 第4章 层 \r\n 4.1 简述 \r\n 4.2 背景 \r\n 4.3 适用性 \r\n 4.4 结 构 \r\n 4.5 交互 \r\n 4.6 效果 \r\n 4.7 策略 \r\n 4.8 示例代码 \r\n 4.9 相关模式和技术 \r\n 第二部分 资源模式 \r\n 1. 资源和上下文 \r\n 2. 资源和并发 \r\n 3. 数据访问资源 \r\n 4. 资源管理 \r\n 5. 资源模式 \r\n 第5章 资源修饰器 \r\n 5.1 简述 \r\n 5.2 背景 \r\n 5.3 适用性 \r\n 5.4 结构 \r\n 5.5 交互 \r\n 5.6 效果 \r\n 5.7 策略 \r\n 5.8 示例代码 \r\n 5.9 相关模式和技术 \r\n 第6章 资源池 \r\n 第7章 资源定时器 \r\n 第8章 资源描述器 \r\n 第9章 重试器 \r\n 第10章 选择工厂 \r\n 第11章 域对象工厂 \r\n 第12章 更新工厂 \r\n 第13章 域对象装配器 \r\n 第14章 分页迭代器 \r\n 第四部分 缓存模式 \r\n 第15章 缓存访问器 \r\n 第16章 即时缓存 \r\n 第17章 预填缓存 \r\n 第18章 缓存查找序列 \r\n 第20章 缓存复制器 \r\n 第21章 缓存统计 \r\n 第五部分 并发模式 \r\n 第22章 事务 \r\n 第23章 乐观锁定 \r\n 第24章 悲观锁定 \r\n 参考文献 \r\n后记\r\n
数据库是企业级应用系统的基石,即使最简单的桌面应用程序也经常要使用关系数据库支持数据持久性。数据访问代码的性能对整个系统往往有很大的影响。数据访问逻辑的复杂性以及标准的多样性,使这些代码经常成为设计中最困难的部分。即使不考虑代码复用和支持多种数据库平台,冗余和有缺陷的代码也很难避免。对此我有深刻的体会:精心设计的应用逻辑和数据访问细节纠缠成一团乱麻,调试和维护如同一场噩梦;不良的并发设计造成死锁,缓慢的数据库资源初始化也令用户喋喋不休;针对已有的数据库设计了系统,到头来用户却坚持要使用另一种产品。当我读到这本书的时候,不觉豁然开朗,原来数据访问代码应该是这样设计的!
在设计模式大行其道的今天,这是一本适逢其会的好书。原书的作者依据多年从事数据库开发的经验,抽象出了25种常用的关系数据库访问模式,进行了详细准确的阐述。全书由导言和五部分模式组成。导言对应用程序和中间件、软件抽象、设计模式有简短而精彩的论述,并对数据访问模式的应用提供了建议。后面的每个部分都包括一组模式的详细说明和对这组模式的概述。对每个模式都体现了一种经过千锤百炼的设计的精髓,可以在许多数据访问标准和商业化产品中发现它们的遗迹。即使不将其付诸实践,您也可以从中领略到一些杰出设计思想的精妙之处。
从架构师到编码人员,包括学习数据库技术的学生,都可以从本书受益。对照传统的数据库教科书,您会发现本书的独到之处。
本书由鄢爱兰、王安鹏主译。参与本书翻译工作的还有谢君英、王延华、马孝荣、欧阳叙好,盛海燕和谢小花录入了本书的代码并进行了初排,在此一并感谢。由于译者水平有限,难免有错漏之处,欢迎批评指正。
Clifton Nock是位于美国科罗拉多州丹佛市的PeopleSoft公司的高级软件架构师。他在IBM工作了5年,他的工作内容是设计编程接口,以简化对iSeries操作系统及其集成数据库的访问,他在这项工作中拥有9项美国专利。他在Minnesota大学讲授过几门编程课程,并经常出席世界级的技术会议。他拥有Minnesota大学的计算机科学硕士学位。
前言数据是构成企业基础的主要元素。会计人员要使用商业数据作出决策;生产人员和采购人员要依靠进货和订购数据调整库存;销售人员要研究客户的历史数据;执行经理则要依靠数据研究公司的管理。企业软件使这些关键的决策者能够阅读、编写和组织数据。业务应用程序中的数据访问功能对于其质量和可用性起着举足轻重的作用。开发人员必须花费很大的精力设计有效的数据访问代码,否则整个应用程序就可能运行得很慢或者容易存在缺陷。数据访问模式无论在什么样的应用领域,企业软件开发人员都要解决同样的数据访问问题。以下是设计数据访问组件时遇到的一些常见问题: ● 应用程序需要使用多种数据库产品。 ● 用户界面需要隐藏晦涩的数据库语义。 ● 数据库资源初始化非常慢。 ● 数据访问细节使应用程序难以开发与维护。 ● 应用程序需要缓存频繁访问的数据。 ● 多个用户需要并发访问相同的数据。这些问题都有通用的解决方案。一些方案非常直观,已经被成千上万的开发者独立地发现。另一些则不那么明显,因为它们已经被融合在最健壮的数据访问方案中。数据访问模式描述了解决这类共同设计问题的一般策略。模式不一定要规定具体的实现,而是要描述一种有效的设计和结构,构成解决方案的基础。本书描述了专门用于关系数据访问的模式。到目前为止,关系数据库是现在企业软件所使用的最流行、经过最多实践检验的数据存储机制。其他持久性技术,如面向对象数据库和层次数据库,也正在逐渐普及。这些后备的数据库存储的数据更接近运行时的对象形式,因此更容易应用传统的面向对象模式和技术。谁应该阅读本书?本书是为负责构建数据访问软件组件的软件架构师、设计人员和工程师编写的。此外,本书的材料也适合希望了解常见数据访问问题和解决方案的学生。本书使用一般的数据库和面向对象概念和术语描述模式。读者应该对这两个领域有基本的了解。如果遇到不熟悉的术语,请参考本书最后的术语表。本书所述的模式适用于多种平台、程序设计语言和数据库。每种模式的示例代码使用Java 2 Standard Edition(J2SE)、Java 2 Enterprise Edition(J2EE)和Java Database Connectivity(JDBC)API编写。示例代码使用Structured Query Language(SQL)语言表示数据库操作。如果读者对Java和JDBC有一些了解,则对于研究这些示例代码会有帮助,但这并不是必需的。对于不那么直观的代码都给出了注释和说明。本书是如何组织的本书是一部模式编目,详细描述了一组数据访问模式。本书根据适用性把模式组织成几个不同的部分。因为这是一本编目,所以不需要强迫自己按照顺序阅读模式的描述。如果一个模式依赖于其他模式定义的概念,则会有明确的交待。模式使用简洁的、描述性的、熟悉的名字标识。模式名非常重要,因为你可以在交谈和撰文中使用它们。将一组互相作用的类描述成资源修饰器的实例,与反复详细描述模式中的每个成分相比更加有效。本书的“绪论”说明了研究和应用数据访问模式的动机,并简要介绍了每种模式。这一章还定义了以后各章描述模式细节的形式。本书的其他部分就是模式编目,把每一类模式划分为一个部分: ● 第一部分,“解耦模式”描述了其他应用程序逻辑从解耦数据访问代码的模式,这些模式可以产生更清晰的应用程序代码,减少了仅和数据访问细节有关的修改造成缺陷的可能性。 ● 第二部分,“资源模式”描述了有效管理数据库资源的模式。 ● 第三部分,“输入/输出模式”描述了简化输入输出操作的模式,在以物理形式表示的关系数据和域对象表示之间使用一致的转换。 ● 第四部分,“缓存模式”描述了实现战略性数据缓存的模式,解决数据访问优化和缓存开销之间的折衷问题。 ● 第五部分,“并发模式”描述了实现并发策略的模式。总结和其他模式编目一样,本书也是不完备的。建议你调整书中的解决方案使其适应你的应用程序,并在这个过程中发现新的数据访问模式。即使你没有像本书这样正式用文档记录模式,使用和鉴别它们也是有好处的。关于本书所述的模式,如果你有什么意见或见解,我都真诚地欢迎。你可以写信请Addison-Wesley转交给我,也可以发送电子邮件至dataaccesspatterns@awl.com。