产品研发规范库

来源与适用说明

主要来源:John Ousterhout《A Philosophy of Software Design》,原技能作者使用的中文翻译站点。原技能定稿前已通读该站的前言、第 1—21 章与总结,并核对图示;站点同时展示英文正文,术语有歧义时可对照阅读。阅读范围为该站所呈现版本,不代表其他版次。

本规范使用自己的表述,把设计观点转成开发与审查时的工作判断;没有复制书中代码或大段正文。工程示例、按任务缩放的流程、授权边界和验证方式属于本规范的应用约定,不声称是作者逐条提出的要求。

主题 原文章节 使用位置
持续设计与复杂性的判据 第 1 章、第 2 章 变更放大、认知负荷、未知的未知
持续投入设计、避免战术性补丁 第 3 章 小幅改进与方案比较
接口与实现、深模块 第 4 章 从调用方评价封装效果
封装设计知识、避免泄漏 第 5 章 按知识归属划分职责
适度通用 第 6 章 减少场景绑定,保持常见用途易用
相邻层的抽象差异 第 7 章 检查透传层及其实际价值
复杂性归属与配置 第 8 章 优先由有能力负责的模块完成决策
拆分、合并、通用与专用代码 第 9 章 检查拆分后的独立理解能力
异常与特殊情况 第 10 章 契约简化、恢复与聚合处理
比较设计 第 11 章 对重要决策设计两次
注释的作用及其内容 第 12 章、第 13 章 接口契约与实现理由
命名 第 14 章 准确表达概念,避免歧义
先写注释 第 15 章 实现前检查契约是否清晰
演进与文档维护 第 16 章 当前约束下改善边界,保持文档就近和唯一
一致性与显然的行为 第 17 章、第 18 章 沿用有效约定,解释隐式行为
抽象增量、测试、继承和设计模式 第 19 章 设计与验证互相反馈,按收益使用机制
性能设计 第 20 章 基线、瓶颈、关键路径与重测
总体目标与危险信号 第 21 章、全书总结 以降低复杂度检验原则的适用性

理解“以抽象为增量”时保留条件:可以等功能需要某项抽象时再设计它;一旦需要,就把这项抽象设计清楚。它不要求在需求出现前先建通用平台。

前言把降低复杂度作为总体目标。具体原则是否采用,应由实际收益判断,不能把任何一条原则机械化成层数、方法长度、接口数量或重构配额。

不直接转成强制规范的观点

  • 作者建议持续投入部分开发时间,但所举比例及收益曲线不是本规范的工时指标或生产率承诺。
  • 作者批评以用例逐个通过为中心的 TDD,同时肯定单元测试与缺陷回归。这里保留其对设计的要求,不禁止现有测试方法。
  • 第 10 章的持续重试和进程崩溃来自特定运行环境,不适合作为通用默认操作;恢复方式仍取决于系统契约。
  • 第 18 章关于具体类型声明的建议,不覆盖项目的依赖抽象约定。调用者必须知道的性能或并发保证应写入契约,无需一律暴露内部容器类型。
  • 继承、装饰器、设计模式和 getter/setter 都按实际封装收益判断,不一律禁用,也不因机制名称熟悉而默认采用。