用途:在代码评审、重构或新实现中,判断两段重复代码是否应当合并共用。核心理念是“意图(目的)相同才共用”,而非字面相同就共用。
主要能力:
- 提供判断矩阵:字面相同且意图相同→共用;字面不同但意图相同→统一实现;字面相同但意图不同→禁止共用(最重要);字面不同且意图不同→维持独立。
- 提供判断流程:先问两段代码目的是否相同,再看字面是否相同,分别对应共用、统一、禁止共用、不处理。
- 识别 DRY 误用征兆:不同领域概念共用同一工具函数;把“恰好相同的算式”抽成公共函数;公共函数内不断增加的 if (type == A)/else if (type == B) 分支;函数名过于泛化(如 calculate、process、transform);一方改规格时担心另一方被破坏;公共函数参数持续膨胀。
- 给出意图同一性判定标准:变更原因测试(一方规格变化时另一方是否因同一原因变化)、命名测试(能否给公共函数起在两处语境都自然的名称)、领域测试(是否表示同一领域概念)。
- 提供评审观察点:确认意图、分离变更原因、命名自然度、参数膨胀、领域边界。
适用场景:被指出“有相似代码”的评审;准备抽取公共函数时;工具函数被跨领域复用;公共函数参数开始膨胀。不宜过度应用的场合:明显同目的的样板代码(配置初始化、日志输出等)、框架/库自带工具、与目的无关的纯数学运算。
限制:资料未提供安装命令、运行方式、支持平台、是否收费、版本与语言绑定信息,均暂未提供。原文示例为 Rust 代码,但同时注明语言无关。相关技能建议一并参考 domain-building-blocks、first-class-collection、package-design。