1. 满足业务要求
  2. 尽量避免缺陷
  3. 易于理解
  4. 易于演进
  5. 易于复用

满足业务要求

事实

  1. 需求的复杂性
  2. 沟通的模糊性

应对

  1. 加快认知:结构化的需求探索方法
  2. 提升沟通质量:高质量的沟通并强调设计契约
  3. 可以灵活应对变化:提升设计演进能力(所谓中台,实际上就是聚合变化和不变化的内容放在一起)

尽量避免缺陷

缺陷无法避免!只能尽量

事实

  1. 缺陷无法完全避免
  2. 没有及时发现缺陷和处理缺陷才是真正影响成本的因素

应对

  1. 缩短缺陷发现周期
  2. 降低缺陷的发现和修复成本呢
  3. 缩小缺陷的影响范围

易于理解

事实

  1. 代码阅读的次数和时间远远高于编写次数与时间
  2. 代码中充满了细节

应对

  1. 编写时尊重未来读者的时间
  2. 建立一致的风格和范式
  3. 通过封装、层次化、抽象等降低认知负担
  4. 避免意外,尽可能达到望文生义
  5. 避免其他不必要内容的深入

易于演进

事实

  1. 软件在生命周期中一定会修改

应对

  1. 做到正交设计
  2. 使用自动化测试保证质量
  3. 少就是多:避免大规模预先设计,增强弹性设计

易于复用

事实

  1. 作为信息制品,软件的复用成本极低
  2. 设计不良导致了复用困难

应对

  1. 在业务级别复用
  2. 定义清晰的职责和契约
  3. 高质量的管理依赖