具体描述
《面向模式的软件架构 卷5:模式与模式语言》共分3部分,首先介绍了单个模式,详细阐述了过去累积的关于如何描述和应用模式的诸多见解,接着探究了模式之间的关系,从组织的角度说明了各个模式的领域,最后介绍了如何将模式和模式语言相结合。
《面向模式的软件架构 卷5:模式与模式语言》适合软件架构师和开发人员阅读。
点击链接进入英文版:
Pattern Oriented Software Architecture: On Patterns and Pattern Languages, Volume 5
作者简介
Frank Buschmann德国慕尼黑西门子技术公司资深技术专家及负责人,Wiley软件设计模式系列图书主编。他的研究领域包括对象技术、软件架构、产品线、 模型驱动软件开发和模式。曾是ANSI C++标准化委员会X3J16的成员,于1996年发起了首届EuroPLoP会议。
Kevlin Henney 在编程语言和技术、软件架构、模式和敏捷开发等领域从事辅导和实践工作。他是很多软件会议固定邀请的演讲人,同时也参与了多个会议的组织工作,包括EuroPLoP。他经常发表会议论文,主持各种出版物上定期和不定期的专栏。
Douglas C. Schmidt国际公认的软件开发专家,尤其在模式、面向对象框架、实时中间件、建模工具和开源软件开发等方面享有盛誉,美国范德比尔特大学 (Vanderbilt University)计算机科学教授。他的研究领域包括模式和模式语言,优化原理,对于支持服务质量的组件中间件相关技术的实证分析,以及支持分布式实 时嵌入式系统的模型驱动的工程工具。
目录信息
0.1 渊源 1
0.2 成功与失败 2
0.2.1 观察 2
0.2.2 状态 3
0.2.3 处方 4
0.3 模式定义及解释 5
0.4 深入理解模式 11
第一部分 模式剖析
第1 章 问题之解决方案及其他 15
1.1 问题之解决方案 15
1.1.1 一个例子(1) 15
1.1.2 重现与良好 16
1.2 流程和物件 16
1.3 “好”的解决方案 17
1.4 驱动力:模式之心脏 19
1.4.1 一个例子(4) 19
1.4.2 dysfunctional、bad 还是anti 21
1.5 上下文 22
1.5.1 一个例子(5) 23
1.5.2 上下文的一般性 23
1.5.3 独立上下文 24
1.5.4 一个例子(6) 25
1.6 一般性 25
1.7 一图胜(逊)千言 27
1.8 模式命名 29
1.8.1 模式命名的语法分类 30
1.8.2 字面命名还是隐喻 30
1.9 模式是循序渐进的 31
1.10 模式既是讲故事,又能发起对话 33
1.11 模式不能代替思考 33
1.12 从“问题—解决方案”到模式 34
第2 章 多种多样的模式实现 35
2.1 是否存在一个通用的模型呢 35
2.1.1 Observer 模式:快速回顾 36
2.1.2 结构的变化与角色 36
2.1.3 行为的变化 37
2.1.4 内部差异 38
2.1.5 语言及平台的差别 39
2.1.6 领域、环境相关的变化 40
2.1.7 再论假设 41
2.2 模式与框架 42
2.2.1 工具和上下文环境 44
2.2.2 两个框架的故事 44
2.3 模式与形式主义 47
2.4 通用性与特殊性 48
第3 章 模式格式 50
3.1 风格与实质 50
3.2 格式的功能 52
3.3 格式的元素 53
3.4 细节 55
3.4.1 案例 56
3.4.2 图示 57
3.4.3 <code>…</code> 57
3.5 鸟瞰图 58
3.5.1 从金字塔到托盘 58
3.5.2 模式骨架 58
3.5.3 总结意图 60
3.5.4 模式抽象 60
3.6 不同的格式 60
3.6.1 演变 61
3.6.2 选择 62
3.7 风格与实质(Redux) 63
第二部分 模式之间的关系
第4 章 模式孤岛 67
4.1 模式的联系 67
4.2 设计实验:将模式作为孤岛 68
4.3 第二个设计实验:交织在一起的模式 72
4.4 模式密度 73
第5 章 模式的互补性 75
5.1 一个问题,多种解决方案 75
5.2 互相竞争的模式 76
5.2.1 以状态为例 76
5.2.2 模式族 79
5.2.3 迭代开发 80
5.2.4 适配开发 83
5.2.5 遵从康威定律 84
5.2.6 与风格的设计对话 86
5.3 互相合作的模式 87
5.3.1 一个关于值的例子 88
5.3.2 设计上的完善 88
5.4 模式结合 89
5.4.1 再论迭代 89
5.4.2 再论适配编程 91
5.5 互补性:竞争、完善、结合 92
第6 章 模式复合 93
6.1 常见模式排列 93
6.2 从元素到复合 93
6.2.1 Pluggable Factory 94
6.2.2 Composite Command 的两种视角 95
6.2.3 模式复合的格式 96
6.3 从补充到复合 97
6.3.1 重申 97
6.3.2 适配 99
6.4 是元素还是组合 100
6.4.1 组合的含义 100
6.4.2 深入MVC 101
6.5 复合分析与综合 102
6.5.1 非设计模式的复合 102
6.5.2 设计模式复合 103
第7 章 模式序列 104
7.1 模式讲述软件工程成功的故事 104
7.2 模式故事 105
7.2.1 一个小故事 105
7.2.2 已经发表的故事 107
7.3 从故事到序列 108
7.4 模式的序列 109
7.4.1 一个早期的例子 110
7.4.2 模式序列既是流程也是物件 110
7.4.3 再次回到以前提到的小故事 111
7.5 回顾模式复合和模式互补 112
7.5.1 重组 112
7.5.2 再论Batch Iterator 113
7.5.3 再论Interpreter 114
7.5.4 再论Align Architecture andOrganization 115
7.6 回到上下文的问题 116
7.6.1 定义上下文 116
7.6.2 专用化与差异化 118
7.7 模式间的联系 118
第8 章 模式集合 120
8.1 模式手册 120
8.2 组织模式集合 121
8.3 即时组织 121
8.4 根据层次组织 122
8.4.1 设计和架构 122
8.4.2 惯用法 123
8.4.3 混合层次 124
8.4.4 层次 124
8.5 根据领域组织 125
8.6 根据分区组织 125
8.6.1 阶层架构 126
8.6.2 分区 126
8.7 根据意图组织 126
8.7.1 根据意图划分POSA 的模式 127
8.7.2 根据意图划分GoF 的模式 128
8.7.3 根据意图划分DDD 模式 128
8.7.4 反思模式意图 128
8.8 组织模式集合(重奏) 128
8.9 问题框架 129
8.9.1 问题框架 130
8.9.2 问题框架和模式的对比 131
8.9.3 问题框架与模式的组合 132
8.10 模式符号学 132
8.11 模式集合与风格 134
8.11.1 Unix 接口设计模式 135
8.11.2 Web 2.0 设计模式 136
8.11.3 风格与概念一致性 137
8.12 走向模式语言 138
第三部分 模式语言
第9 章 语言的元素 141
9.1 使用模式进行设计 141
9.2 从模式故事和模式序列到模式语言 142
9.2.1 一个未完成的故事 143
9.2.2 序列的组合 145
第10 章 模式网络及其他 147
10.1 模式网络 147
10.2 流程与物件 147
10.2.1 流程的迭代本质 148
10.2.2 具体的面向领域的引导 152
10.3 单项最佳 153
10.4 驱动力:模式语言之心脏 155
10.5 模式上下文定义拓扑结构与架构风格 158
10.6 模式构成词汇,序列展示语法 159
10.7 通用性 162
10.7.1 不同的模式序列 162
10.7.2 模式的组合 163
10.8 完整的语言胜过千幅图 163
10.9 面向领域的命名帮助忆起模式语言 164
10.10 模式语言展开对话并讲述很多故事 165
10.11 路还很长 165
10.12 模式语言对创造性智慧的回报 167
10.13 从模式网络到模式语言 168
第11 章 亿万种不同的实现 169
11.1 众口难调 169
11.2 渐进式成长 169
11.2.1 面向系统的、进化的设计方法 170
11.2.2 渐进式成长和敏捷开发 171
11.3 并没有排斥重构 172
11.4 一次一个模式 174
11.4.1 明白手头上的问题的关键 174
11.4.2 优先级驱动的设计决策 175
11.4.3 模式集成先于模式实现 175
11.5 基于角色的模式集成 176
11.5.1 选择1:识别并且保持已经实现的角色 176
11.5.2 选择2:识别并分离已经实现的角色 177
11.5.3 选择3:将缺失角色分配给既有设计元素 178
11.5.4 选择4:将缺失角色作为新设计元素来实现 179
11.5.5 基于角色的模式集成和渐进式成长过程 180
11.6 模式语言和参考架构 180
11.7 模式语言与产品线架构 181
11.8 从十亿个到一个……再到一些 184
第12 章 模式语言的格式 185
12.1 风格与本质 185
12.2 格式的作用 185
12.3 格式的元素 186
12.3.1 展示全貌 187
12.3.2 简洁与细节 187
12.3.3 模式连接 189
12.3.4 再说元素 189
12.4 细节,细节,细节 190
12.4.1 模式语言的格式 190
12.4.2 鸟瞰图 190
12.4.3 展示顺序 194
12.4.4 示例 194
12.4.5 细节程度 195
12.5 再论风格与本质 197
第13 章 模式与模式语言 198
13.1 模式和模式语言:共性 198
13.1.1 共同的核心属性 198
13.1.2 共同的根源 199
13.1.3 一个模式的模式语言 199
13.2 模式与模式语言:区别 200
13.2.1 模式和细节 200
13.2.2 模式语言和交互 200
13.2.3 两个独立的世界 201
13.3 模式“对”模式语言 201
第14 章 从模式到人 202
14.1 模式以人为本 202
14.1.1 模式价值体系 203
14.1.2 人类读者 204
14.2 对软件开发者的支持 204
14.3 对软件使用者的支持 206
14.3.1 用户界面 206
14.3.2 用户需求 206
14.3.3 交到用户手中 207
14.4 对模式作者的支持 207
14.4.1 协同写作 207
14.4.2 作者研讨会 208
14.4.3 牧放 208
14.5 技术为人 209
第15 章 模式的过去、现在和未来 210
15.1 过去的3 年 210
15.1.1 模式与模式语言 210
15.1.2 理论和概念 212
15.1.3 重构与集成 212
15.1.4 GoF 213
15.2 模式的现状 213
15.3 模式的明天在哪里 214
15.3.1 模式与模式语言 214
15.3.2 理论和概念 216
15.3.3 重构与集成 216
15.3.4 支持其他的软件开发方法 216
15.3.5 对其他学科的影响 217
15.3.6 其他学科对我们的影响 217
15.4 简述模式的未来 218
第16 章 万事如意 219
模式概念总结 221
参考模式 225
参考文献 238
· · · · · · (收起)
读后感
用户评价
这本书的排版和视觉呈现给我一种非常沉稳的感觉,墨水在纸上的表现仿佛也自带一种不容置疑的权威性。但这种沉稳感在内容传达上偶尔会显得有些单调乏味。我尝试用一种更为感性的方式去理解架构设计,即将其视为一种“艺术”——一种在逻辑约束下寻求美感和效率平衡的创造过程。然而,这本书更像是提供了一套极其可靠的“工程学规范”,强调的是“应该如何做”以确保系统不崩溃,而不是“可以如何做”来激发创新和独特性。在讨论到特定的抽象层级时,作者仿佛已经将所有可能性都预先设定好了框架,这在某种程度上限制了读者的想象空间。我希望看到更多关于“非主流”或“反模式”的探讨,比如哪些看起来很像某个经典模式但实际上却会埋下隐患的设计,并剖析其深层原因。缺少这种对“灰色地带”的探索,使得整本书的论调略显单一,更像是对既定真理的阐释,而非对未知领域的前沿探索。
这本书的行文风格着实让我感到一种强烈的“学者气息”,那种严谨到近乎刻板的逻辑推导贯穿始终。我尤其欣赏作者在论证某个设计选择的优劣时所展现出的那种近乎数学般精确的分析框架。它似乎没有太多口语化的引导,更像是直接呈现了一系列经过无数次推演和验证的结论。在探讨如何避免“僵化”架构时,书中提供的几种对比模型之间的细微差别被剖析得淋漓尽致,每一个权衡点都标得清清楚楚。然而,这种极致的精确性也带来了一个副作用:缺乏实际案例的“润滑”。阅读过程中,我常常在脑海中构建一个具体的软件场景,试图将书中的抽象原则映射上去,但书中的例子往往过于简略,或者干脆就是纯粹的概念性展示,这使得知识的“落地性”大打折扣。我希望能看到更多关于在现实世界中,这些模式是如何在资源、时间、团队能力等约束下被妥协和调整的过程,而不是书本上展示的那种理想化的、完美遵循模式的蓝图。如果能增加一些“失败的尝试”的反思,或许能让这本书的价值更上一层楼。
对于一个长期在敏捷开发环境中工作的人来说,这本书给我带来的冲击在于它似乎更加侧重于“结构化”的、预先思考的深度,而不是快速迭代中的“涌现式”设计。我注意到,书中花费了大量的篇幅来讨论如何预先定义边界和服务间的契约,这无疑是稳健系统的基石。但是,在当今快速变化的市场需求面前,如何将这种深思熟虑的架构蓝图与短周期的反馈循环有效结合,似乎并未得到充分的阐述。书中的论述更像是在构建一座宏伟的、需要长期规划的城堡,而我更想知道的是,在搭建过程中,我们如何应对突如其来的“地基问题”——即需求发生重大变更时,现有的模式如何伸缩和适应。我期待的是一种能够弥合“宏观结构设计”与“微观敏捷实现”之间鸿沟的见解,但这本书似乎更偏向于前者,将后者视为一个可以后续处理的“实现细节”。这种侧重点的差异,使得我总感觉自己读到的更像是一部关于“稳定期架构维护”的手册,而非“动态环境下的架构演进”指南。
这部著作的标题虽然引人注目,但内容给我带来的感受却有些复杂。我原本是抱着极大的期望来阅读的,希望能从中窥见软件架构设计的精髓,尤其是那种能够穿越时间考验、经久不衰的“模式”力量。然而,在翻阅的过程中,我发现书中的某些章节对于初学者来说可能显得有些晦涩难懂,术语的堆砌和理论的抽象化似乎占据了相当大的篇幅,这使得我不得不频繁地停下来查阅背景知识。例如,在讨论到特定架构风格的演进路径时,作者似乎默认读者已经对该领域的历史脉络了如指掌,没有给予足够的上下文铺垫。这不像是在引导我一步步构建知识体系,更像是一份高级研讨会的会议记录,适合那些已经在该领域摸爬滚打了多年的资深工程师。虽然这种深度是值得肯定的,但对于想要系统性建立起“模式”认知框架的读者来说,入口的门槛设置得过高了。我期待的是一种更具教学性的叙事结构,能将复杂的概念拆解为易于消化的模块,而不是直接抛出一个完整的、未经充分解释的理论大厦。整体而言,它更像是一本思想的摘录集,而非操作手册。
从阅读体验上来说,这本书的论述深度是毋庸置疑的,它迫使我必须放慢速度,对每一个句子进行反刍和咀嚼。然而,这种慢节奏也带来了知识吸收效率上的挑战。我注意到书中大量使用了逻辑连接词和复杂的从句结构来构建论点,这在追求逻辑严密性的技术写作中很常见,但对于一个追求快速知识获取的读者而言,无形中增加了理解的负担。这种表达方式让我想起了早年阅读一些经典哲学著作的感觉——其思想的厚重感是压倒性的,但表层的语言障碍也需要克服。如果能用更现代、更清晰的语言结构来包装这些深刻的洞察,我相信它能触及更广大的工程师群体,而不仅仅是那些拥有充足时间进行深度学术研究的读者。总而言之,这是一部需要献出大量精力和耐心的作品,它的价值深藏于文字的迷宫之中,需要读者带着极大的毅力去挖掘和提炼。
太罗嗦,一张图几行代码能讲清的事非要用一大段文字来描述,末了还要引用其他书的例子来证明。 上辈子混起点的作者伤不起啊。。。
太罗嗦,一张图几行代码能讲清的事非要用一大段文字来描述,末了还要引用其他书的例子来证明。 上辈子混起点的作者伤不起啊。。。
太罗嗦,一张图几行代码能讲清的事非要用一大段文字来描述,末了还要引用其他书的例子来证明。 上辈子混起点的作者伤不起啊。。。
太罗嗦,一张图几行代码能讲清的事非要用一大段文字来描述,末了还要引用其他书的例子来证明。 上辈子混起点的作者伤不起啊。。。
这卷毕业那个夏天才在图书馆发现,没来得及仔细看.(注:或许还是因为我向图书馆申请过购买,此外英文版先在信科分馆出现了)