7.重复的危害

系统中的每一项只是都必须具有单一,无歧义,权威的表示
不要重复自己

  • 强加的重复
  • 无意的重复
  • 无耐性的重复
  • 开发者之间的重复

强加的重复

  • 信息的多种标识
  • 代码中的文档
  • 文档与代码
  • 语言问题

无意的重复

无耐性的重复

开发者之间的重复

让复用变得容易

8.正交性

正交性系统:消除无关事物之间的影响
好处: 提高生产率和降低风险
编码:

  • 让你的代码保持解耦
  • 避免使用全局数据
  • 避免编写相似的函数
    测试
    文档
    认同正交性

9. 可撤销性

不存在最终决策

灵活的架构

10. 曳光弹

在黑暗中发光的代码

  • 用户能够及早看到能工作的东西
  • 开发者构建了一个他们能在其中工作的结构
  • 你有了一个集成平台
  • 你有了可用于延时的东西
  • 你讲更能够感觉到工作进展

曳光弹并非钟恩能够击中目标

曳光代码VS原型制作

11.原型与便笺

应制作原型的事物

  • 架构
  • 已有系统中的新功能
  • 外部数据的结构或内容
  • 第三方工具或组件
  • 性能问题
  • 用户界面设计

为了学习而制作原型

怎样使用原型

可忽略的细节

  • 正确性
  • 完整性
  • 健壮性
  • 风格

制作架构原型

  • 主要组件的责任是否得到了良好定义?是否适当
  • 只要组件间的协作是否得到了良好定义
  • 耦合是否得以最小化
  • 你能否确定重复的潜在来源
  • 接口定义和各项越是是否可接受
  • 每个模块在执行过程中是否能访问到其所需的数据?能否在需要时进行访问

怎样不使用原型

12.领域语言

语言的界限就是一个人的世界的界限

靠近问题领域编程

实现小星预言

数据语言与命令语言

独立语言与嵌入式语言

易于开发还是易于维护

13.估算

估算,以避免发生意外

多准确才足够准确

估算来自哪里

理解提问内容

建立系统的模型

把模型分解为组件

给每个参数指定值

计算答案

追踪你的估算能力

估算项目进度

  • 检查需求
  • 分析风险
  • 设计,实现,集成
  • 向用户确认

通过代码对进度表进行迭代

在被要求进行估算时说什么

放慢估算速度,并花一点时间仔细检查我们在这一节描述的步骤,你几乎总额能得到更好的结果.