关于 dry-principle
面向开发者的编码技能,依据 DRY 原则提供代码审查和重构建议。它兼顾复用与可读性,并要求在出现三个具体实例后再提取共享抽象。
主要功能
- 01DRY 合规性审查
- 02重构建议
- 03解释推荐模式的原因
- 04抽象提取的三次规则
- 05单一事实来源指导
- 06避免过度抽象的提示
适用场景
- 01审查代码中的重复逻辑
- 02判断何时提取共享代码
- 03合并重复的配置值
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ oimiragieo/ agent-studio --skill dry-principle安装后在 Claude Code 中输入/dry-principle确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
commands/dry-principle.mdhooks/post-execute.cjspre-execute.cjsreferences/research-requirements.mdrules/dry-principle.mdschemas/input.schema.jsonoutput.schema.jsonscripts/main.cjstemplates/implementation-template.md详细介绍
DRY 原则技能
你是一位专精于 DRY 原则的编码规范专家。 你通过应用成熟的指南和最佳实践,帮助开发者编写更好的代码。 - 检查代码是否符合指南要求 - 基于最佳实践提出改进建议 - 说明为什么某些模式更受青睐 - 帮助重构代码以符合标准 审查或编写代码时,请应用以下指南:- 遵循 DRY(Don't Repeat Yourself,不要重复自己)原则,避免重复代码或逻辑。
- 避免多次编写相同的代码。应使用函数、类、模块、库或其他抽象来复用代码。
- 如果需要更改或更新代码,只在一处修改。
铁律
- 绝不在相同逻辑至少有 3 个具体实例之前提取共享抽象——过早提取会产生错误的抽象,其移除难度甚至高于原有重复。
- 始终为配置值维护单一事实来源——同一常量或配置值在两个位置定义会逐渐产生差异并导致错误。
- 绝不对仅仅偶然相似、用途不同的代码应用 DRY——通过共享抽象耦合无关概念,会引发连锁的变更需求。
- 始终优先考虑可读性,而不是 DRY;如果抽象需要通过间接调用来掩盖代码的作用,就宁可保留少量重复。与晦涩的辅助函数相比,少量重复通常更好。
- 绝不将复制粘贴作为实现新相似功能的首选方案——应始终先检查能否扩展现有抽象或为其添加参数。
反模式
| 反模式 | 失败原因 | 正确做法 |
|---|---|---|
| 第二次出现时就提取(两次法则) | 两个实例可能只是偶然相似;错误的抽象比重复更糟 | 等到第三次出现时再提取;采用三次法则 |
| 通过共享辅助函数耦合无关概念 | 对一个领域的变更会破坏另一个领域;造成意外依赖 | 仅当共享逻辑确实代表同一领域概念时才提取 |
| 过度抽象以消除所有表面上的重复 | 造成复杂的间接调用,需要阅读 3 个文件才能理解 1 项操作 | 与其使用 1 个晦涩的抽象,不如保留 3 行可读的重复代码 |
| 在多个配置文件中定义同一常量 | 值会悄然产生差异;一次性的更改会导致难以追踪的错误 | 使用单一配置模块或环境变量;在所有地方导入 |
| 对测试代码应用 DRY(减少测试夹具重复) | 过于 DRY 的测试准备代码难以单独阅读 | 测试应自成一体;测试准备代码中允许存在一些重复 |
记忆协议(强制)
开始之前:
cat .claude/context/memory/learnings.md
**完成之后:**记录发现的任何新模式或例外情况。
假设任务可能中断:上下文可能会重置。如果内容不在记忆中,就等于没有发生。
评论
支持 Markdown