本书系统地介绍了模式的概念并讨论了模式描述的原则;给出了来自不同应用领域的8个软件体系结构模式;还给出了8个设计模式,这些模式分别针对在定义了软件系统的整体结构之后遇到的典型问题;对惯用法模式进行了阐述;论述了将模式组织成模式系统的重要性;讨论了模式如何嵌入到软件体系结构中,特别是对软件体系结构及其基本原则的理解。此外,本书还介绍了模式历史、相关工作和整个模式团体,并对模式的未来发展作了展望。
本书力图做到既是教材又是参考指南,帮助软件开发人员以一种新的方式考虑软件体系结构,并提供了一些技术来解决特定的再现设计问题,对软件开发的初学者和专家都有帮助。把本书用作软件工程课程的指南,可以给学生提供大型软件设计的完整的新观点。把本书用作参考手册,可以提供全面的技术并随查随用。本书包含了涉及模式实际应用的许多指导原则和约束限制。本书可作为计算机专业高年级本科生、研究生的软件工程教材或参考书,亦可作为软件开发人员的参考手册。
译者序
译者介绍
前言
读者指南
第1章 模式
1.1 什么是模式
1.2 模式是如何构成的
1.3 模式类别
1.4 模式间关系
1.5 模式描述
1.6 模式和软件体系结构
1.7 总结
第2章 体系结构模式
2.1 引言
2.2 从混沌到结构
2.3 分布式系统
2.4 交互式系统
2.5 适应性系统
第3章 设计模式
3.1 引言
3.2 结构化分解
3.3 工作的组织
3.4 访问控制
3.5 管理
3.6 通信
第4章 惯用法
4.1 引言
4.2 惯用法能够提供什么
4.3 惯用法与风格
4.4 在哪里可以发现惯用法
第5章 模式系统
5.1 什么是模式系统
5.2 模式分类
5.3 模式选择
5.4 作为实现指南的模式系统
5.5 模式系统的演化
5.6 总结
第6章 模式和软件体系结构
6.1 引言
6.2 软件体系结构中的模式
6.3 软件体系结构启用技术
6.4 软件体系结构的非功能属性
6.5 总结
第7章 模式团体
7.1 起源
7.2 领军人物和他们的著作
7.3 团体
第8章 模式将走向何方
8.1 模式采掘
8.2 模式组织与索引
8.3 方法与工具
8.4 算法、数据结构和模式
8.5 形式化模式
8.6 最后评述
符号
词汇表
参考文献
模式索引
索引
本书讨论了软件体系结构的模式,简称模式。近年来,模式已引起广泛关注,讨论模式的形式包括专题讨论会、研究班、电子论坛、期刊论文、专著等。模式团体甚至开始举行它们自己的会议。所有这些有关模式的热情讨论看起来像是达到了“对象波”的顶峰。
为什么关于模式如此令人激动呢?很可能是因为它们在收集熟练的设计者和软件工程师的经验方面起到了“根基”的作用。这样的专家对许多再现设计问题已有了解决方案。模式以易于获得的方式和所希望的良好书写的格式捕获了这些已证实的解决方案。
我们希望本书对软件开发的初学者和专家都有帮助。本书可以帮助初学者在适当规模的项目上像专家一样工作,而不需要积累多年的经验。本书可以支持专家去设计具备已定义属性的大型复杂软件,并可以促使他们学习别的专家的经验。本书会帮助这两种人找到对一个特定设计问题的充分考验的解决方案。
本书力图做到既是教材又是参考指南,帮助软件开发人员以一种新的方式考虑软件体系结构,并提供一些技术来解决特定的再现设计问题。把本书用作软件工程课程的指南,可以给学生提供大型软件设计的完整的新观点。把本书用作参考手册,可以提供全面的技术并随查随用。本书包含了涉及模式实际应用的许多指导原则和约束限制。
以规范形式记录设计知识可以追溯到Christopher Alexander。他在建筑学领域率先提出模式概念。他的著作《The Timeless Way of Building》说明了如何将模式应用到房屋构建以及邻近地区和整个城市的规划之中。他的工作的基础主题是居住场所的设计,不仅要注重功能性和流行趋势,而且要讲究舒适感和欣慰感。 良好设计的建筑可以展现清晰可辨而又难以描述和量化的内在特质。简而言之,这样的建筑拥有“没有名称的质量”。
把这种方法改用到软件工程中的早期试验主要偏重于Alexander的风格。最近软件界经历了寻求更适合软件设计的风格形态的试验。对模式尝试了几种不同的描述形式,但至今没有达成一致。
尽管我们把相当多的精力用于寻找一种描述模式的好方法,但是开发“模式风格”理论并不是本书的主要目标。这当然不是开始模式工作的原动力。在1991年,我们以一种直截了当的方式记录了第一个模式。随着模式系统文档的逐步增长,很快就发现单个模式不能单独存在。模式揭示了丰富的相互关系集。这是出版本书的驱动因素之一,而不是在某个时候把模式文档化并作为系列论文出版。采用图书这种方法的缺点在于,在成书之前需要一个较长的酝酿思考阶段。尽管模式成名已经几十年了,但是花费如此之长的时间来提出一个好的模式描述仍然让我们吃惊。
其他四位作者经历了同样的现象。1994年秋天,Erich Gamma、Richard Helm,Ralph
Johnson和John Vlissidese出版了重要著作《设计模式——可复用面向对象软件的基础》。尽
管设计模式的思想不再新颖,但是“GoF”(简称为“四人帮”)的著作仍然给出了对良好描
述的面向对象程序设计模式的最初分类。
我们的方法和“四人帮”的方法略有差别,尽管有许多相似之处并有部分重叠。“GoF”的著作集中于设计层模式,而我们的模式跨越几个抽象层次。范围从高层体系结构模式经设计模式到低层惯用法。我们也关注面向对象以外的问题,并试图结合对模式描述技术的最新认识。我们的整体目标是使用模式来在软件体系结构的更广泛的语境中提供帮助。我们把这种方式叫做面向模式的软件体系结构。我们谈到了模式系统,模式不仅仅被收集在不同种类的容器中,而且也根据相应的标准分组。“GoF”的著作通过把模式划分为“创建型”、“结构型”和“行为型”等开始了分类工作。我们下一步试图根据已获得的更好标准(如交互式和适应性系统、工作的组织、通信和访问控制等)来对模式分组。
我们想要鼓励我们模式系统的用户与其同事共享我们的研究成果。模式共享建立了设计
问题的通用词汇表。它使得正在成长的模式团体的成员以更有效的方式来确认、命名和讨
论问题及其解决方案。在系统设计中达到“提速”是在工作中使用模式的一个更加重要的
理由。
我们的模式系统并不完全。如此多的模式用一本书是不可能记录下来的。随着技术的演化,薪的模式也跟着演化。我们希望读者能针对你们的特定需要对我们的模式系统进行扩展、修改和剪裁。缺少的模式应该添加,不需要的模式可以忽略,其他的模式可以更改。
如果你对本书风格和内容方面的改进有任何评论、批评或建议,请大胆提出。我们也欢迎用我们描述的模式来报告经验。你可以写信并通过John Wiley & Sons.出版公司转交给我们,或发电子邮件到patterns@mchp.siemens.de。
我们对于本书包括的绝大多数模式的最初版本已经在因特网上进行了讨论。我们的动机不是为了获得免费广告或赠送模式。相反,我们想支持出版业的一个新趋势,即在刊印之前尽早将材料展示给团体成员,这样对每一个部门都有益。我们欣赏这些经验并感谢所有的参与者。但是这并不意味着我们关闭了本书的公开电子讨论。邮件列表仍然存在并仍然欢迎读者参与。预订指南可以在模式主页上找到。它的URL是:
http://www.hillside.net/patterns/
这个URL也是所有模式方面(比如已出版的和待出版的著作最重要的信息资源。
本书结构
模式会议、模式论文等)
第1章系统地介绍了模式的概念并讨论了模式描述的原则。第2章-第4章给出了我们的模式目录的内容。
体系结构模式是最高层模式。它们旨在提供整个系统体系结构的构架。第2章给出了来自不同应用领域的8个体系结构模式。
第3章给出了8个设计模式,这些模式分别针对在定义软件系统的整体结构之后遇到的典型问题。例如,我们的设计模式处理以下情况:构建控制复杂性的组件,分布组件间工作
量,组织组件间通信。
第4章是模式内容的第三部分也是最后一部分。它处理惯用法,一种与语言相关的模式。但是本书主要谈到其他人的工作而不是对我们自己的惯用法进行文档化,并且仅仅提供了一个惯用法作为一个具体实例。本书没有对我们自己的惯用法进行描述,理由很简单——已经有了很多诸如C++和Smalltalk语言的惯用法可供使用。我们不是仅对这些模式进行改述,我们要有选择地引用原始资源。
在第5章中,我们证实了把模式组织成模式系统是很重要的。这样的系统在如下几个方面对模式的作者和使用者都有帮助:为手头的情形寻找正确的模式,填充模式汇集中的缺口,理解模式之间的关系并演化模式系统。
在第6章中,我们讨论了如何将模式嵌入到软件体系结构中。特别是我们讨论了对于软
件体系结构及其基本原则的理解,我们展示了模式是如何支持这些原则的。
第7章讨论模式历史、相关工作和整个模式团体。结束本书前,第8章给出了对于模式未来发展的展望。
本书以附录结尾,附录包括符号表、常用词汇表、参考文献和模式索引。