本书从最基本编程理论开始,探讨了软件设计中的基本概念,比如过程、对象、封装、继承、多态等;然后,在理清这些概念的基础上,书中集中探讨了构建好对象的若干原则;随后,在这些思想和原则的基础上,书中使用了大量的例子和篇幅分析了软件设计过程中可能遇到的典型问题及可能的解决方案。,本书会尝试脱离面向对象设计经验的束缚,直面设计的自然面貌:设计也许不轻松,但是也许并不那么的复杂。
本书首先介绍了面向对象设计中的基本概念,比如对象、元素、继承、多态等;然后集中探讨了面向对象设计的基本原则,如KISS原则、单一职责原则、迪米特法则等;随后分析了设计的基本流程及可能遇到的各种问题,如设计原则、模式、重构等;脱离面向对象设计经验的束缚,直面设计的本来面貌。
目录第1章 设计概论 11.1 面向对象程序设计 11.1.1 面向对象思想——任督二脉 11.1.2 面向对象设计原则——九阳神功 21.1.3 模式——乾坤大挪移 31.1.4 重构——太极拳 41.1.5 抽象与组合——独孤九剑 51.2 面向过程与面向对象 51.3 设计的宏观面貌 81.3.1 开发模式:自顶向下和自底向上 81.3.2 开发方式:迭代 91.3.3 开发结果:模块化 101.4 设计的微观世界 101.4.1 函数 101.4.2 对象 121.5 小结 15第2章 设计原则 162.1 通用原则 162.1.1 KISS原则 162.1.2 代码之"形" 172.2 核心原则 202.2.1 单一职责原则(SRP):做一个专一的人 202.2.2 开放封闭原则(OCP):改造世界大部分不是破坏原来的秩序 212.2.3 里氏替换原则(LSP):长大后,我就成了你 242.2.4 接口分离原则(ISP):不要一口吃成胖子 262.2.5 依赖倒置原则(DIP):抽象的艺术才有生命力 272.3 扩展原则 282.3.1 迪米特法则:尽量不与无关的类发生关系 282.3.2 好莱坞法则:不要调用我,让我调用你 292.3.3 优先使用组合原则:多使用组合,少使用继承 312.4 小结 33第3章 设计过程 343.1 设计目标 353.1.1 对象设计目标——"高内聚+低耦合" 353.1.2 对象设计过程——"折中+迭代+重构" 363.2 对象来源 383.3 对象创建 413.3.1 直接创建对象 413.3.2 间接创建对象 443.3.3 对象创建时机 513.4 对象管理 573.4.1 线性结构——集合对象 573.4.2 树形组合结构 653.5 对象交互 713.5.1 组合——直接引用,互通有无 713.5.2 中介者——间接通信 743.5.3 事件——使用回调函数通信 773.5.4 交互即耦合 843.6 对象存储 843.6.1 文件存储 853.6.2 数据库存储 943.7 访问控制 1143.8 组织协作 1323.8.1 代码的组织方式——"同步+异步+多线程" 1323.8.2 业务的组织方式 1383.9 对象布局 1553.9.1 进入业务逻辑系统的及时道门槛——"Controller" 1553.9.2 为什么要分层——分层的意义 1553.9.3 如何分层——价值导向 1563.9.4 层的对接——模块化与面向接口编程 1713.9.5 接口的转换——适配器 1723.9.6 接口的简化——门面 1753.9.7 层的载体——包 1793.9.8 分层的代价——效率和复杂性 1803.9.9 层效率的有益补充 1803.10 应对变化 1833.10.1 变化的根源 1843.10.2 变化的种类 1843.10.3 处理变化的原则 1863.10.4 应对变化的设计思路 1893.11 小结 199第4章 模式 2004.1 模式定义 2004.2 模式的意义 2024.3 模式有缺点吗 2034.4 设计的四个阶段 2064.4.1 及时个阶段:设计不足 2074.4.2 第二个阶段:模仿设计 2084.4.3 第三个阶段:过度设计 2084.4.4 第四个阶段:适度设计 2134.5 反模式 2144.5.1 开发流程反模式 2144.5.2 数据库设计反模式 2154.5.3 密码管理反模式 2174.5.4 .NET开发反模式 2174.6 小结 220第5章 重构 2215.1 重构动机 2215.1.1 软件代码是会腐烂的 2225.1.2 破窗效应 2235.1.3 技术债务 2245.2 重构的定义 2245.3 重构难题 2245.3.1 技术上的难题 2255.3.2 管理上的难题 2255.3.3 个人难题——程序员心理学 2265.4 好代码长什么样 2265.5 重构技法 2305.5.1 基本技法——重命名 2355.5.2 及时种技法——转移职责 2375.5.3 第二种技法——封装细节 2435.5.4 第三种技法——抽象对象 2545.6 重构实施 2595.6.1 重构的实施方式 2595.6.2 重构的质量 2615.7 小结 266第6章 回到起点 2676.1 忘掉模式 2676.2 忘掉对象 2696.3 回到起点 2766.3.1 设计原本 2776.3.2 设计的静态性 2776.3.3 设计的动态性 289后记 292