dry-refactoringlisted
Install: claude install-skill aiskillstore/marketplace
# DRY 标准化流程:从识别到重构
这个技能指导你系统性地应用 DRY (Don't Repeat Yourself) 原则,通过四步标准化流程消除代码重复,提升代码质量和可维护性。
## When to Use This Skill
使用此技能当用户请求:
- 消除代码重复或冗余
- 重构有明显复制粘贴痕迹的代码
- 应用 DRY 原则优化代码库
- 识别并修复"代码坏味道"(如魔术数字、重复逻辑)
- 提取公共逻辑为可复用单元
- 改善代码的可维护性
**关键触发词**: DRY, 重复代码, 代码重复, 重构, 消除重复, 复制粘贴, 魔术数字, 代码坏味道, 抽象, 提取函数
## 核心思想
> **系统中的每一处知识都必须拥有一个单一、明确、权威的表示。**
这意味着:
- 任何业务逻辑、算法或配置信息都应该只存在于代码库的**一个地方**
- 如果需要修改,你只需改这**一个地方**
- 修改会自动反映到所有使用该逻辑的地方
**两次法则 (Rule of Two)**:
当你第二次写下几乎相同的代码块时,警钟就应该敲响。这是开始重构的信号。
## 四步标准化流程
这是一个可在编码任何阶段应用的微循环。严格按照步骤执行,确保重构的安全性和有效性。
---
### 第一步:识别重复 (Identify Repetition)
**目标**: 像侦探一样,对代码中的"坏味道"保持警惕,找出所有重复。
#### 1.1 明显的重复
**直接复制粘贴**:
- 两块或多块代码长得几乎一模一样
- 只有变量名或少数值不同
- 这是最明显、最需要被消除的重复
**示例**:
```javascript
// 重复 1
function calculateOrderDiscount(orderTotal) {
if (orderTotal > 100) {
return orderTotal * 0.1;
}
return 0;
}
// 重复 2
function calculateCouponDiscount(couponTotal) {
if (couponTotal > 100) {
return couponTotal * 0.1;
}
return 0;
}
```
**"魔术数字"或字符串**:
- 同一个配置值或字符串在多处以字面量形式出现
- 例如:`0.08`、`"http://api.example.com"`、`100`
**示例**:
```python
# 魔术数字重复
def calculate_tax_1(amount):
return amount * 0.08 # ❌ 魔术数字
def calculate_tax_2(amount):
return amount * 0.08 # ❌ 再次出现
def calculate_total(amount):
tax = amount * 0.08 # ❌ 第三次
return amount + tax
```
#### 1.2 语义上的重复
**结构性重复**:
- 代码结构相似,但具体变量名或值不同
- 多个 if-else 结构都在做类似的条件判断和赋值
**示例**:
```typescript
// 结构性重复
function processUserData(user: User) {
if (user.age >= 18) {