Agent skill · software engineering · aiskillstore

dry-refactoring

Guides systematic code refactoring following the DRY (Don't Repeat Yourself) principle. Use when user asks to eliminate code duplication, refactor repetitive code, apply DRY principle, or mentions code smells like copy-paste, magic numbers, or repeated logic. Implements a 4-step workflow from identifying repetition to verified refactoring.

Why this skill is useful

Implements a systematic 4-step workflow for refactoring code that eliminates duplication, which the AI wouldn't reliably generate on its own.

What it needs

About 9k tokens when loaded. Last updated 2026-08-07. 405 stars on the source repository.

What this skill does

DRY 标准化流程:从识别到重构 这个技能指导你系统性地应用 DRY (Don't Repeat Yourself) 原则,通过四步标准化流程消除代码重复,提升代码质量和可维护性。 When to Use This Skill 使用此技能当用户请求: 消除代码重复或冗余 重构有明显复制粘贴痕迹的代码 应用 DRY 原则优化代码库 识别并修复"代码坏味道"(如魔术数字、重复逻辑) 提取公共逻辑为可复用单元 改善代码的可维护性 关键触发词: DRY, 重复代码, 代码重复, 重构, 消除重复, 复制粘贴, 魔术数字, 代码坏味道, 抽象, 提取函数 核心思想 系统中的每一处知识都必须拥有一个单一、明确、权威的表示。 这意味着: 任何业务逻辑、算法或配置信息都应该只存在于代码库的一个地方 如果需要修改,你只需改这一个地方 修改会自动反映到所有使用该逻辑的地方 两次法则 (Rule of Two): 当你第二次写下几乎相同的代码块时,警钟就应该敲响。这是开始重构的信号。 四步标准化流程 这是一个可在编码任何阶段应用的微循环。严格按照步骤执行,确保重构的安全性和有效性。 --- 第一步:识别重复 (Identify Repetition) 目标: 像侦探一样,对代码中的"坏味道"保持警惕,找出所有重复。 1.1 明显的重复 直接复制粘贴: 两块或多块代码长得几乎一模一样 只有变量名或少数值不同 这是最明显、最需要被消除的重复 示例: "魔术数字"或字符串: 同一个配置值或字符串在多处以字面量形式出现 例如:0.08、"http://api.example.com"、100 示例: 1.2 语义上的重复 结构性重复: 代码结构相似,但具体变量名或值不同 多个 if-else 结构都在做类似的条件判断和赋值 示例: 逻辑重复: 两个不同的函数,代码看起来不一样 但它们在业务逻辑层面实现的是同一个目标 示例: 识别清单 当你审查代码时,检查以下信号: [ ] 复制粘贴的代码块(完全相同或高度相似) [ ] 相同的数字、字符串在多处出现 [ ] 相似的 if-else 或 switch-case 结构 [ ] 功能相似但命名不同的函数 [ ] 相同的算法在不同地方重新实现 [ ] 相同的验证逻辑分散在多个地方 💡 Action: 使用搜索功能查找重复的字面量、相似的函数名模式。记录所有重复出现的位置。 --- 第二步:抽象逻辑 (Abstract the Logic) 目标: 将重复的逻辑提取出来,封装到一个独立、可复用的单元中。 2.1 识别可变与不变部分 不变部分: 这是重复的核心逻辑 每次重复时都保持不变的代码 这将成为你的抽象主体 可变部分: 每次重复时发生变化的东西 不同的值、变量名、配置 这些将成为函数或类的参数 分析示例: 2.2 选择合适的抽象形式 根据重复的特点,选择最合适的抽象方式: 抽象形式 适用场景 示例 --------- --------- ------ 函数 (Function) 封装一段算法或行为 计算折扣、验证输入、格式化数据 类 (Class) 封装行为 + 关联状态 用户管理器、数据处理器、配置管理器 模块/组件 一组相关的函数、类和配置 认证模块、日志模块、API 客户端 配置文件/常量 重复的魔术数字或字符串 API 端点、税率、阈值 高阶函数 重复的控制流程或模式 重试逻辑、缓存包装、错误处理 2.3 设计抽象接口 函数抽象示例: 常量抽象示例: 类抽象示例: 抽象设计原则 Do: ✅ 参数化可变部分(值、配置、行为) ✅ 保持接口简单(参数数量 ≤ 4 个) ✅ 使用描述性命名(说明"做什么"而非"怎么做") ✅ 考虑未来的扩展性(但不要过度设计) Don't: ❌ 创建过于通用的抽象("万能函数") ❌ 过早抽象(只有一次使用时不要抽象) ❌ 忽略性能影响(例如不必要的函数调用开销) ❌ 使用难以理解的抽象(增加认知负担) 💡 Action: 创建一个新的函数、类或配置文件,将"不变部分"放进去,将"可变部分"定义为参数。 --- 第三步:替换实现 (Replace the Implementation) 目标: 用新的抽象单元替换所有旧的重复代码。 3.1 系统性替换 步骤: 1. 定位所有重复点:回到第一步记录的所有位置 2. 逐一替换:删除旧代码,调用新抽象 3. 传入正确参数:确保参数对应正确 4. …

How to use it

Reference it in AdaL, Claude Code, Cursor or any coding agent — nothing to install:

@skills aiskillstore/dry-refactoring

View the source on GitHub

Browse the @skills marketplace