本书首先介绍了面向对象设计中的基本概念,比如对象、元素、继承、多态等;然后集中探讨了面向对象设计的基本原则,如kiss原则、单一职责原则、迪米特法则等;随后分析了设计的基本流程及可能遇到的各种问题,如设计原则、模式、重构等;最后脱离面向对象设计经验的束缚,直面设计的本来面貌。
第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