《架构整洁之道》由软件工程界的泰斗级人物罗伯特·C·马丁(Uncle Bob)撰写,这本书深入探讨了软件架构的设计原则、模式与实践,旨在引导开发者构建更健壮、更灵活、易于维护的软件系统,马丁以其丰富的经验和深刻的见解,阐释了如何避免软件开发过程中常见的陷阱,并提供了一系列具体可行的策略来提高代码质量,书中不仅讨论了技术细节,还强调了软件开发的价值观和态度,认为良好的架构设计不仅是技术上的追求,更是一种职业责任,这本书是一本宝贵的资源,适合所有希望提升自己在软件设计和架构领域能力的开发人员。
灵活运用软件架构的通用性规律,就可以明显提高开发人员在全部软件系统项目生命周期内的生产主力。现如今,传奇私服手机软件工匠RobertC.Martin(Bob大叔),携畅销书籍CleanCode与TheCleanCoder所获巨大成就之威,向大家刻骨铭心表明了这种规律并亲授应用之道。
Martin在《架构整洁之道》中远不只是在为大家出示选择项,他基本上是在将软件世界中跨过半世纪的各种各样架构种类的工作经验传道授业,目地是让读者即能阅尽全部架构型号选择,又可通晓其怎样决策成功与失败。Martin也确实不辜负殷切期望,这书中充满了立即而合理的解决方法,以供读者解决自身遭遇的真实挑戰——这些或*终造就或完全毁坏新项目的挑戰。不得不读,不管读者是新任的還是未来的软件架构师、系统分析师、系统软件室内设计师或手机软件工程项目经理,或者背负着将别人设计方案落地式重担的开发者,这本书都能够让大家获益匪浅。
本书是造就“Clean神话传说”的Bob大叔在架构行业的登峰之作,紧紧围绕“架构干净整洁”这一关键导向性,系统化分析其起缘、内函及应用领域,包含软件研发详细全过程及全部关键架构方式。这书分成6部分,第一一部分基本纲领地明确提出软件架构设计方案的最终目标,叙述软件架构设计方案的重中之重与方式;第二~4一部分从开发软件中三个基础编程现代性的界定和特点考虑,进一步叙述涵数、部件、用户体验设计与完成的基本定律,及其他们是怎样合理搭建软件系统的总体架构的;第五一部分从干净整洁架构的界定刚开始,详尽论述软件架构设计过程中涉及到的各个方面,包含区划內部部件界限、运用普遍策略模式、绕开不正确、控制成本、解决特殊情况等,并以实战演练实例将內容有机化学融合起來;第六一部分叙述实际完成关键点;附则则通过创作者数十年的手机软件从事亲身经历再度证实这书的见解。针对每一位软件研发从业者——不管从业的是实际编号完成、架构设计方案,還是软件研发管理方法,这书全是必不可少的。
目录
- 第1部分 概述
- 第1章 设计与架构究竟是什么 3
- 目标是什么 4
- 案例分析 5
- 本章小结 11
- 第2章 两个价值维度 12
- 行为价值 13
- 架构价值 13
- 哪个价值维度更重要 14
- 艾森豪威尔矩阵 15
- 为好的软件架构而持续斗争 16
- 第2部分 从基础构件开始:编程范式
- 第3章 编程范式总览 21
- 结构化编程 22
- 面向对象编程 22
- 函数式编程 23
- 仅供思考 23
- 本章小结 24
- 第4章 结构化编程 25
- 可推导性 26
- goto是有害的 28
- 功能性降解拆分 29
- 形式化证明没有发生 29
- 科学来救场 29
- 测试 30
- 本章小结 31
- 第5章 面向对象编程 32
- 封装 33
- 继承 36
- 多态 38
- 本章小结 44
- 第6章 函数式编程 45
- 整数平方 46
- 不可变性与软件架构 47
- 可变性的隔离 48
- 事件溯源 49
- 本章小结 51
- 第3部分 设计原则
- 第7章 SRP:单一职责原则 56
- 反面案例2:代码合并 59
- 解决方案 60
- 本章小结 61
- 第8章 OCP:开闭原则 62
- 思想实验 63
- 依赖方向的控制 67
- 信息隐藏 67
- 本章小结 67
- 第9章 LSP:里氏替换原则 68
- 继承的使用指导 69
- 正方形/长方形问题 70
- LSP与软件架构 70
- 违反LSP的案例 71
- 本章小结 73
- 第10章 ISP:接口隔离原则 74
- ISP与编程语言 76
- ISP与软件架构 76
- 本章小结 77
- 第11章 DIP:依赖反转原则 78
- 稳定的抽象层 79
- 工厂模式 80
- 具体实现组件 82
- 本章小结 82
- 第4部分 组件构建原则
- 第12章 组件 84
- 组件发展史 85
- 重定位技术 88
- 链接器 88
- 本章小结 90
- 第13章 组件聚合 91
- 复用/发布等同原则 92
- 共同闭包原则 93
- 共同复用原则 94
- 组件聚合张力图 95
- 本章小结 97
- 第14章 组件耦合 98
- 无依赖环原则 99
- 自上而下的设计 105
- 稳定依赖原则 106
- 稳定抽象原则 112
- 本章小结 117
- 第5部分 软件架构
- 第15章 什么是软件架构 120
- 开发(Development) 122
- 部署(Deployment) 123
- 运行(Operation) 123
- 维护(Maintenance) 124
- 保持可选项 124
- 设备无关性 126
- 垃圾邮件 128
- 物理地址寻址 129
- 本章小结 130
- 第16章 独立性 131
- 用例 132
- 运行 133
- 开发 133
- 部署 134
- 保留可选项 134
- 按层解耦 135
- 用例的解耦 136
- 解耦的模式 136
- 开发的独立性 137
- 部署的独立性 137
- 重复 138
- 再谈解耦模式 139
- 本章小结 141
- 第17章 划分边界 142
- 几个悲伤的故事 143
- FitNesse 146
- 应在何时、何处画这些线 148
- 输入和输出怎么办 151
- 插件式架构 152
- 插件式架构的好处 153
- 本章小结 154
- 第18章 边界剖析 155
- 跨边界调用 156
- 令人生畏的单体结构 156
- 部署层次的组件 158
- 线程 159
- 本地进程 159
- 服务 160
- 本章小结 161
- 第19章 策略与层次 162
- 层次(Level) 163
- 本章小结 166
- 第20章 业务逻辑 167
- 业务实体 168
- 用例 169
- 请求和响应模型 171
- 本章小结 172
- 第21章 尖叫的软件架构 173
- 架构设计的主题 174
- 架构设计的核心目标 175
- 那Web呢 175
- 框架是工具而不是生活信条 175
- 可测试的架构设计 176
- 本章小结 176
- 第22章 整洁架构 177
- 依赖关系规则 179
- 一个常见的应用场景 183
- 本章小结 184
- 第23章 展示器和谦卑对象 185
- 谦卑对象模式 186
- 展示器与视图 186
- 测试与架构 187
- 数据库网关 188
- 数据映射器 188
- 服务监听器 189
- 本章小结 189
- 第24章 不完全边界 190
- 省掉最后一步 191
- 单向边界 192
- 门户模式 193
- 本章小结 193
- 第25章 层次与边界 194
- 基于文本的冒险游戏:Hunt The Wumpus 195
- 可否采用整洁架构 196
- 交汇数据流 199
- 数据流的分割 199
- 本章小结 201
- 第26章 Main组件 203
- 最细节化的部分 204
- 本章小结 208
- 第27章 服务:宏观与微观 209
- 面向服务的架构 210
- 服务所带来的好处 210
- 运送猫咪的难题 212
- 对象化是救星 213
- 基于组件的服务 215
- 横跨型变更 216
- 本章小结 216
- 第28章 测试边界 217
- 测试也是一种系统组件 218
- 可测试性设计 219
- 测试专用API 220
- 本章小结 221
- 第29章 整洁的嵌入式架构 222
- “程序适用测试”测试 225
- 目标硬件瓶颈 228
- 本章小结 238
- 第6部分 实现细节
- 第30章 数据库只是实现细节 240
- 关系型数据库 241
- 为什么数据库系统如此流行 242
- 假设磁盘不存在会怎样 243
- 实现细节 243
- 但性能怎么办呢 244
- 一段轶事 244
- 本章小结 246
- 第31章 Web是实现细节 247
- 无尽的钟摆 248
- 总结一下 250
- 本章小结 251
- 第32章 应用程序框架是实现细节 252
- 框架作者 253
- 单向婚姻 253
- 风险 254
- 解决方案 255
- 不得不接受的依赖 255
- 本章小结 256
- 第33章 案例分析:视频销售网站 257
- 产品 258
- 用例分析 258
- 组件架构 260
- 依赖关系管理 261
- 本章小结 262
- 第34章 拾遗 263
- 按层封装 264
- 按功能封装 266
- 端口和适配器 268
- 按组件封装 270
- 具体实现细节中的陷阱 274
- 组织形式与封装的区别 275
- 其他的解耦合模式 277
- 本章小结:本书拾遗 279
- 后序 280
- 附录A 架构设计考古 283