目录
第Ⅰ部分 耦合
第1章 耦合与系统设计 3
1.1 什么是耦合 3
1.2 耦合度 4
1.2.1 生命周期的共享 4
1.2.2 共享知识 5
1.3 知识流 7
1.4 系统 8
1.4.1 系统中的耦合 8
1.4.2 可选:机械工程中的耦合和成本管理 11
1.5 本章要点 12
1.6 小测验 13
第2章 耦合与复杂性:Cynefin框架 15
2.1 什么是复杂性 15
2.1.1 软件设计的复杂性 16
2.1.2 复杂性是主观的 16
2.2 Cynefin框架 16
2.2.1 明确 17
2.2.2 繁杂 17
2.2.3 复杂 17
2.2.4 混乱 19
2.2.5 无序 20
2.3 比较Cynefin领域 20
2.4 软件设计中的Cynefin 21
2.4.1 示例A:集成外部服务 21
2.4.2 示例B:更改数据库索引 23
2.5 Cynefin应用 25
2.6 Cynefin与复杂性 25
2.7 本章要点 25
2.8 小测验 26
第3章 耦合与复杂性:交互 29
3.1 复杂性的本质 29
3.2 复杂性与系统设计 30
3.2.1 线性交互 30
3.2.2 复杂交互 31
3.2.3 复杂性与系统规模 32
3.3 层次复杂性 32
3.3.1 仅优化全局复杂性 33
3.3.2 仅优化局部复杂性 34
3.3.3 平衡复杂性 35
3.4 自由度 35
3.4.1 软件设计中的自由度 35
3.4.2 自由度和复杂交互 37
3.5 复杂性与约束 37
3.5.1 示例:限制自由度 37
3.5.2 Cynefin多个领域中的约束 38
3.6 耦合与复杂交互 39
3.7 连接耦合和复杂性的示例 39
3.7.1 设计A:使用SQL筛选支持案例 39
3.7.2 设计B:使用查询对象 41
3.7.3 设计C:使用专用查找方法 42
3.7.4 耦合、自由度和约束 43
3.8 本章要点 44
3.9 小测验 44
第4章 耦合与模块化 47
4.1 模块化 47
4.2 模块 48
4.2.1 乐高积木 50
4.2.2 相机镜头 50
4.3 软件系统中的模块化 50
4.3.1 软件模块 51
4.3.2 软件模块的功能、逻辑和上下文 52
4.3.3 有效的模块 53
4.3.4 作为抽象的模块 54
4.4 模块化、复杂性与耦合 56
4.4.1 深层模块 56
4.4.2 模块化与复杂性 57
4.4.3 模块化:物极必反 58
4.5 模块化中的耦合 59
4.6 本章要点 60
4.7 小测验 60
第Ⅱ部分 维度
第5章 结构化设计的模块耦合 65
5.1 结构化设计 66
5.2 模块耦合 66
5.2.1 内容耦合 66
5.2.2 公共耦合 68
5.2.3 外部耦合 70
5.2.4 控制耦合 72
5.2.5 印章耦合 74
5.2.6 数据耦合 75
5.3 模块耦合层次的比较 77
5.4 本章要点 78
5.5 小测验 78
第6章 共生性 81
6.1 什么是共生性 81
6.2 静态共生性 82
6.2.1 名称共生性 82
6.2.2 类型共生性 83
6.2.3 意义共生性 84
6.2.4 算法共生性 85
6.2.5 位置共生性 86
6.3 动态共生性 87
6.3.1 执行共生性 87
6.3.2 时序共生性 88
6.3.3 值共生性 89
6.3.4 身份共生性 91
6.4 评估共生性 92
6.4.1 管理共生性 92
6.4.2 共生性与结构化设计中的模块耦合 93
6.5 本章要点 94
6.6 小测验 95
第7章 集成强度 97
7.1 耦合强度 97
7.1.1 结构化设计、共生性还是两者兼而有之 98
7.1.2 结构化设计与共生性:盲点 99
7.1.3 不同的策略 99
7.2 集成强度概念 100
7.3 侵入式耦合 101
7.3.1 侵入式耦合的示例 101
7.3.2 示例:共享数据库的侵入式耦合 102
7.3.3 侵入式耦合的影响 102
7.4 功能耦合 103
7.4.1 功能耦合度 103
7.4.2 功能耦合的原因 105
7.4.3 示例:通过共享数据库实现功能耦合 105
7.4.4 功能耦合的影响 105
7.5 模型耦合 106
7.5.1 模型耦合度 108
7.5.2 示例:通过共享数据库实现模型耦合 109
7.5.3 模型耦合的影响 109
7.6 契约耦合 110
7.6.1 契约耦合的示例 111
7.6.2 契约耦合度 113
7.6.3 契约耦合的深度 114
7.6.4 示例:通过共享数据库实现契约耦合 116
7.6.5 契约耦合的影响 116
7.7 集成强度的讨论 117
7.8 集成强度和异步执行 119
7.9 本章要点 120
7.10 小测验 121
第8章 距离 123
8.1 距离和封装边界 123
8.1.1 距离成本 124
8.1.2 生命周期耦合的距离 125
8.1.3 评估距离 127
8.2 影响距离的其他因素 127
8.2.1 距离与社会技术设计 128
8.2.2 距离与运行时耦合 129
8.2.3 异步通信和更改成本 130
8.3 距离与邻近性 130
8.4 距离与集成强度 131
8.5 本章要点 131
8.6 小测验 131
第9章 波动性 133
9.1 更改与耦合 133
9.2 软件更改的原因 134
9.2.1 解决方案更改 134
9.2.2 问题更改 135
9.3 评估更改率 136
9.3.1 领域分析 136
9.3.2 源代码控制分析 140
9.4 波动性和集成强度 140
9.5 推理波动性 142
9.6 本章要点 143
9.7 小测验 143
第Ⅲ部分 平衡
第10章 平衡耦合 147
10.1 结合耦合的各个维度 147
10.1.1 度量单位 149
10.1.2 稳定性:波动性与强度 149
10.1.3 实际成本:波动性与距离 150
10.1.4 模块化与复杂性:强度与距离 150
10.2 结合强度、距离与波动性 151
10.2.1 维护成本:强度、距离、波动性 151
10.2.2 平衡耦合:强度、距离、波动性 153
10.3 在标量尺度上实现耦合的平衡 154
10.3.1 标量 154
10.3.2 平衡耦合公式 155
10.3.3 平衡耦合:示例 156
10.4 本章要点 158
10.5 小测验 159
第11章 重新平衡耦合 161
11.1 弹性设计 161
11.2 软件更改媒介 162
11.2.1 战术更改 162
11.2.2 战略更改 162
11.3 重新耦合度量与案例研究 164
11.3.1 强度 165
11.3.2 波动性 168
11.3.3 距离 169
11.3.4 重新平衡的复杂性 169
11.4 本章要点 170
11.5 小测验 170
第12章 软件设计的分形几何 173
12.1 增长 173
12.1.1 基于网络的系统 174
12.1.2 作为基于网络系统的软件设计 175
12.1.3 系统增长的原因 175
12.1.4 增长的极限 176
12.1.5 软件设计中的增长动力 177
12.2 创新 180
12.2.1 软件设计中的创新 181
12.2.2 抽象即创新 181
12.3 分形几何 183
12.4 分形模块化 185
12.5 本章要点 185
12.6 小测验 186
第13章 平衡耦合的实践 187
13.1 微服务 187
13.1.1 案例研究1:共享外部知识的事件 187
13.1.2 案例研究2:足够好的集成 191
13.2 架构模式 191
13.2.1 案例研究3:降低复杂性 192
13.2.2 案例研究4:层、端口和适配器 194
13.3 业务对象 197
13.3.1 案例研究5:实体和聚合 197
13.3.2 案例研究6:组织类 200
13.4 方法 201
13.4.1 案例研究7:分而治之 201
13.4.2 案例研究8:代码异味 203
13.5 本章要点 206
13.6 小测验 206
第14章 结语 207
后记 209
附录A 耦合之歌 211
附录B 术语 215
附录C 小测验答案 221
