一、目录介绍
第一部分 模块化的理由
第1章 模块定义
1.1 定义模块/2
1.1.1 可部署/3
1.1.2 可管理/3
1.1.3 可测试/3
1.1.4 原生可重用/3
1.1.5 可组合/4
1.1.6 无状态/4
1.2 软件模块的简洁定义/4
1.3 结论/4
第2章 模块化的两个方面
2.1 运行时模型/5
2.2 开发模型/5
2.2.1 编程模型/6
2.2.2 设计范式/6
2.3 模块化现状/8
2.4 结论/10
第3章 架构与模块化
3.1 定义架构/11
3.2 关于软件架构的一个故事/12
3.2.1 象牙塔/12
3.2.2 乌龟和塔/13
3.3 架构的目标/15
3.3.1 悖论/15
3.3.2 消除架构/16
3.4 模块化:被忽视的部分/17
3.5 回答我们的问题/23
3.6 结论/23
3.7 参考文献/24
第4章 征服复杂性
4.1 企业级复杂性/25
4.2 技术债/26
4.3 设计腐化/27
4.3.1 干扰可维护性/27
4.3.2 阻止可扩展性/28
4.3.3 抑制可重用性/28
4.3.4 限制可测试性/28
4.3.5 妨碍集成/28
4.3.6 阻碍理解/29
4.4 循环依赖/29
4.4.1 循环类型/29
4.4.2 悄然引入的循环/32
4.4.3 管理循环/33
4.4.4 循环总是不好的吗/33
4.5 结合点、模块和SOLID/34
4.6 管理复杂性/35
4.7 模块化的益处/37
4.8 结论/37
4.9 参考文献/38
第5章 实现重用
5.1 可用,重用悖论/39
5.2 关于重用的免责声明/40
5.2.1 粒度/40
5.2.2 重量级/41
5.3 重用还是可用/42
5.4 模块化权衡/42
5.5 模块化设计/43
5.6 结论/44
5.7 参考文献/45
第6章 模块化与SOA
6.1 重新审视“自上而下”/46
6.2 粒度——架构师的强大对手/48
6.2.1 现实世界的一个例子/48
6.2.2 提升一个等级/49
6.2.3 另一个维度/50
6.2.4 全景图/51
6.2.5 服务样例/52
6.3 另一个视图/54
6.4 结论/55
第7章 参考实现
7.1 为什么不用OSGi/56
7.2 这个练习的背景:构建系统/57
7.3 初始版本/57
7.4 第一次重构/59
7.5 第二次重构/61
7.6 第三次重构/63
7.7 第四次重构/66
7.7.1 关于OSGi的好处/67
7.7.2 小结并准备下一次重构/68
7.8 第五次重构/68
7.9 第六次重构/69
7.10 第七次重构/72
7.11 事后剖析/72
7.11.1 关于模块测试/74
7.11.2 关于管理模块依赖/74
7.11.3 关于模块重用/76
7.11.4 关于构建/77
7.11.5 关于面向对象/77
7.12 结论/78
7.13 参考文献/78
第二部分 模式
第8章 基本模式
8.1 管理关系/81
8.1.1 表述/81
8.1.2 描述/81
8.1.3 多种实现/82
8.1.4 影响/85
8.1.5 样例/86
8.1.6 小结/88
8.2 模块重用/89
8.2.1 表述/89
8.2.2 描述/89
8.2.3 多种实现/91
8.2.4 效果/92
8.2.5 样例/93
8.2.6 小结/99
8.3 模块内聚/99
8.3.1 表述/99
8.3.2 描述/100
8.3.3 多种实现/100
8.3.4 效果/101
8.3.5 样例/101
8.3.6 小结/104
第9章 依赖模式
9.1 非循环关系/105
9.1.1 表述/105
9.1.2 描述/105
9.1.3 多种实现/106
9.1.4 效果/107
9.1.5 样例/107
9.1.6 小结/113
9.2 等级化模块/113
9.2.1 表述/113
9.2.2 描述/113
9.2.3 多种实现/115
9.2.4 效果/115
9.2.5 样例/116
9.2.6 小结/117
9.3 物理分层/118
9.3.1 表述/118
9.3.2 描述/118
9.3.3 多种实现/119
9.3.4 效果/119
9.3.5 样例/120
9.3.6 小结/123
9.4 容器独立/124
9.4.1 表述/124
9.4.2 描述/124
9.4.3 多种实现/125
9.4.4 效果/125
9.4.5 样例/126
9.4.6 小结/129
9.5 独立部署/129
9.5.1 表述/129
9.5.2 描述/130
9.5.3 多种实现/130
9.5.4 效果/131
9.5.5 样例/132
9.5.6 小结/135
9.6 参考文献/136
第10章 可用性模式
10.1 发布接口/137
10.1.1 表述/137
10.1.2 描述/137
10.1.3 多种实现/138
10.1.4 效果/140
10.1.5 样例/141
10.1.6 小结/146
10.2 外部配置/147
10.2.1 表述/147
10.2.2 描述/147
10.2.3 多种实现/147
10.2.4 效果/148
10.2.5 样例/149
10.2.6 小结/151
10.3 默认实现/151
10.3.1 表述/151
10.3.2 描述/151
10.3.3 多种实现/151
10.3.4 效果/153
10.3.5 样例/153
10.3.6 小结/156
10.4 模块门面/156
10.4.1 表述/156
10.4.2 描述/156
10.4.3 多种实现/156
10.4.4 效果/158
10.4.5 样例/158
10.4.6 小结/162
第11章 扩展性模式
11.1 抽象化模块/163
11.1.1 表述/163
11.1.2 描述/163
11.1.3 多种实现/164
11.1.4 效果/165
11.1.5 样例/165
11.1.6 小结/168
11.2 实现工厂/168
11.2.1 表述/168
11.2.2 描述/169
11.2.3 多种实现/169
11.2.4 效果/171
11.2.5 样例/171
11.2.6 小结/175
11.3 分离抽象/175
11.3.1 表述/175
11.3.2 描述/175
11.3.3 多种实现/175
11.3.4 效果/178
11.3.5 样例/178
11.3.6 小结/180
11.4 参考文献/181
第12章 通用模式
12.1 就近异常/182
12.1.1 表述/182
12.1.2 描述/182
12.1.3 多种实现/182
12.1.4 效果/183
12.1.5 样例/184
12.1.6 小结/187
12.2 等级化构建/187
12.2.1 表述/187
12.2.2 描述/187
12.2.3 多种实现/189
12.2.4 效果/190
12.2.5 样例/191
12.2.6 小结/195
12.3 测试模块/195
12.3.1 表述/195
12.3.2 描述/195
12.3.3 多种实现/196
12.3.4 效果/197
12.3.5 样例/198
12.3.6 小结/201
第三部分 模块化架构模式与OSGi
第13章 OSGi简介
13.1 一点历史/204
13.2 OSGi所能带来的收益/204
13.2.1 模块化开发/205
13.2.2 管理依赖/205
13.2.3 模块平台/205
13.2.4 版本化的bundle/206
13.2.5 动态(重)部署/206
13.2.6 环境相关的控制/206
13.3 深入理解OSGi/206
13.4 OSGibundle/207
13.4.1 bundle状态/207
13.4.2 OSGi?Service/208
13.5 OSGi运行时管理/209
13.6 重新查看模块化的两个方面/209
13.7 OSGi与模式/209
13.7.1 管理依赖/210
13.7.2 动态性/210
13.7.3 Blueprint规范/211
第14章 贷款样例与OSGi
14.1 起步/212
14.2 清单文件/214
14.3 ?Service/215
14.3.1 Blueprint服务/215
14.3.2 贷款样例配置/215
14.3.3 OSGi?Service声明/218
14.4 安装与执行/219
14.5 结论/220
第15章 OSGi与Scala
15.1 起步/221
15.2 Scala代码/221
15.3 Scalabean配置/224
15.4 Scala?Service配置/224
15.5 构建Scala模块/225
15.6 安装与执行/225
15.7 结论/226
第16章 OSGi与Groovy
16.1 起步/227
16.2 Groovy代码/227
16.3 Groovybean配置/230
16.4 Groovy?Service配置/230
16.5 构建Groovy模块/230
16.6 安装与执行/231
16.7 结论/232
第17章 OSGi的未来
17.1 将OSGi作为推动者/233
17.2 颠覆性/234
17.3 生态系统的威力/236
17.3.1 生态系统与模块化的两个方面/236
17.3.2 基于组件的开发(CBD)不是已经成功了吗/236
17.4 生态系统/237
17.5 结论/238
附录A类设计的SOLID原则/239