用途:为设计模块、API、CLI 或任何供他人使用的代码提供可复用、可维护的设计原则,内容源自 John Ousterhout 的《A Philosophy of Software Design》。
主要能力:围绕“对抗复杂度”展开。复杂度指任何让软件难以理解或修改的东西,症状包括变更放大、认知负担和未知的未知。核心原则是构建深模块:接口简单、实现丰富;接口复杂度接近实现复杂度则是浅模块,属危险信号。示例中 Unix 文件 I/O 仅 5 个调用(open、read、write、lseek、close)隐藏大量复杂度,而 Java 文件读取需多层包装。
其他要点:区分战术编程(先跑通、债务累积)与战略编程(投入设计、长期更快),建议用 10-20% 开发时间改进设计;信息隐藏,避免信息泄漏与按时间而非信息拆分;通过重新定义语义把错误消除在存在之外;模块适度通用;把复杂度下拉到实现层;实现前至少做两次设计。还列出浅模块、信息泄漏、过度暴露、传递方法、重复、模糊命名等危险信号。
使用方式:作为设计评审与编码时的检查清单,逐条对照危险信号与问题清单。资料未提供具体安装命令或调用方式。
适用场景:模块、API、CLI、插件与工具设计,尤其关注接口简洁、默认值合理、渐进式披露与错误消除。
限制:属设计理念与原则,非可直接运行的工具;资料未提供版本、平台、收费或效果数据。