第1章 设计概论 1
1.1 面向对象程序设计 1
1.1.1 面向对象思想——任督二脉 1
1.1.2 面向对象设计原则——九阳神功 2
1.1.3 模式——乾坤大挪移 3
1.1.4 重构——太极拳 4
1.1.5 抽象与组合——独孤九剑 5
1.2 面向过程与面向对象 5
1.3 设计的宏观面貌 8
1.3.1 开发模式:自顶向下和自底向上 8
1.3.2 开发方式:迭代 9
1.3.3 开发结果:模块化 10
1.4 设计的微观世界 10
1.4.1 函数 10
1.4.2 对象 12
1.5 小结 15
第2章 设计原则 16
2.1 通用原则 16
2.1.1 KISS原则 16
2.1.2 代码之“形” 17
2.2 核心原则 20
2.2.1 单一职责原则(SRP):做一个专一的人 20
2.2.2 开放封闭原则(OCP):改造世界大部分不是破坏原来的秩序 21
2.2.3 里氏替换原则(LSP):长大后,我就成了你 24
2.2.4 接口分离原则(ISP):不要一口吃成胖子 26
2.2.5 依赖倒置原则(DIP):抽象的艺术才有生命力 27
2.3 扩展原则 28
2.3.1 迪米特法则:尽量不与无关的类发生关系 28
2.3.2 好莱坞法则:不要调用我,让我调用你 29
2.3.3 优先使用组合原则:多使用组合,少使用继承 31
2.4 小结 33
第3章 设计过程 34
3.1 设计目标 35
3.1.1 对象设计目标——“高内聚+低耦合” 35
3.1.2 对象设计过程——“折中+迭代+重构” 36
3.2 对象来源 38
3.3 对象创建 41
3.3.1 直接创建对象 41
3.3.2 间接创建对象 44
3.3.3 对象创建时机 51
3.4 对象管理 57
3.4.1 线性结构——集合对象 57
3.4.2 树形组合结构 65
3.5 对象交互 71
3.5.1 组合——直接引用,互通有无 71
3.5.2 中介者——间接通信 74
3.5.3 事件——使用回调函数通信 77
3.5.4 交互即耦合 84
3.6 对象存储 84
3.6.1 文件存储 85
3.6.2 数据库存储 94
3.7 访问控制 114
3.8 组织协作 132
3.8.1 代码的组织方式——“同步+异步+多线程” 132
3.8.2 业务的组织方式 138
3.9 对象布局 155
3.9.1 进入业务逻辑系统的第一道门槛——“Controller” 155
3.9.2 为什么要分层——分层的意义 155
3.9.3 如何分层——价值导向 156
3.9.4 层的对接——模块化与面向接口编程 171
3.9.5 接口的转换——适配器 172
3.9.6 接口的简化——门面 175
3.9.7 层的载体——包 179
3.9.8 分层的代价——效率和复杂性 180
3.9.9 层效率的有益补充 180
3.10 应对变化 183
3.10.1 变化的根源 184
3.10.2 变化的种类 184
3.10.3 处理变化的原则 186
3.10.4 应对变化的设计思路 189
3.11 小结 199
第4章 模式 200
4.1 模式定义 200
4.2 模式的意义 202
4.3 模式有缺点吗 203
4.4 设计的四个阶段 206
4.4.1 第一个阶段:设计不足 207
4.4.2 第二个阶段:模仿设计 208
4.4.3 第三个阶段:过度设计 208
4.4.4 第四个阶段:适度设计 213
4.5 反模式 214
4.5.1 开发流程反模式 214
4.5.2 数据库设计反模式 215
4.5.3 密码管理反模式 217
4.5.4 .NET开发反模式 217
4.6 小结 220
第5章 重构 221
5.1 重构动机 221
5.1.1 软件代码是会腐烂的 222
5.1.2 破窗效应 223
5.1.3 技术债务 224
5.2 重构的定义 224
5.3 重构难题 224
5.3.1 技术上的难题 225
5.3.2 管理上的难题 225
5.3.3 个人难题——程序员心理学 226
5.4 好代码长什么样 226
5.5 重构技法 230
5.5.1 基本技法——重命名 235
5.5.2 第一种技法——转移职责 237
5.5.3 第二种技法——封装细节 243
5.5.4 第三种技法——抽象对象 254
5.6 重构实施 259
5.6.1 重构的实施方式 259
5.6.2 重构的质量 261
5.7 小结 266
第6章 回到起点 267
6.1 忘掉模式 267
6.2 忘掉对象 269
6.3 回到起点 276
6.3.1 设计原本 277
6.3.2 设计的静态性 277
6.3.3 设计的动态性 289
后记 292
· · · · · · (
收起)