1. 一种编程理论
1.1. 三个价值观
1.1.1. 沟通
1.1.1.1. 通过代码与外界沟通
1.1.1.2. 软件的绝大多数成本是在第一次部署以后产生的
1.1.1.3. 注重沟通,考虑你的代码的读者会如何想他所看到的东西
1.1.2. 简单
1.1.2.1. KISS
1.1.2.2. 沟通和简单不可分割,权衡后的结果
1.1.3. 灵活
1.1.3.1. 这是衡量低效编程与设计实践的一把标尺
1.1.3.2. 权衡成本与灵活,多一点耐心,在合适的时候用合适的模式
1.2. 六个原则
1.2.1. 局部化原则
1.2.1.1. 保证变化只会产生局部化影响
1.2.1.2. 使用局部变量
1.2.1.3. 尽量少使用全局变量
1.2.1.3.1. 如PHP的$_GET等变量
1.2.2. 最小化重复
1.2.2.1. 有助于保证局部化原则
1.2.2.2. 控制变化的影响扩散
1.2.2.3. DRY
1.2.2.4. 重复不是罪过,它只是增加了变化的开销
1.2.3. 将逻辑与数据捆绑
1.2.3.1. 这是局部化原则影响的必然结果
1.2.4. 对称性
1.2.4.1. 无论在什么地方,同样的概念都以同样的形式呈现,保持统一
1.2.5. 声明式表达
1.2.6. 变化率
2. 动机
2.1. 软件设计应该致力于减少整体成本
2.2. 清晰的代码会带来收益
2.3. 代码来源于人,服务于人
3. 类
3.1. 类
3.1.1. 数据的变化比逻辑要频繁得多
3.1.2. 学会如何用类来包装逻辑和如何表达逻辑的变化
3.1.3. 减少类的数量是对系统的改进
3.1.4. 学会如何用类来包装逻辑和如何表达逻辑的变化
3.2. 简单的超类名
3.2.1. 简短、表现力
3.2.2. 尽量用一个单词来命名,对于重要的类
3.3. 限定性的子类名
3.3.1. 多级继承体系应该进行重构
3.3.2. 应该用类名来讲述代码的故事
3.4. 抽象接口
3.4.1. 针对接口编程,不要针对实现编程
3.4.2. 这里的接口是指一组没有实现的操作
3.4.3. 很多时候系统根本不需要变得更灵活
3.4.4. 当确定需要灵活性时,才应该引入这种灵活性
3.5. interface
3.5.1. 带来了多继承的一部分灵活性
3.5.2. 没有多继承的复杂性和二义性
3.5.3. 对接口的修改是不被鼓励的
3.5.4. 接口名为IFile,类名为File
3.6. 有版本的interface
3.6.1. 可以声明一个新的interface,使它继承原有的interface