代码重构Skill refactor

代码重构是一种软件开发技能,用于提高代码质量、减少技术债务和改善可维护性,而不改变外部行为。关键方法包括提取函数、替换条件为多态、移除重复代码,适用于代码难以理解、存在重复逻辑、函数过大等场景,提升开发效率和系统稳定性,关键词:代码质量、技术债务、可维护性、重构方法、软件开发。

架构设计 0 次安装 0 次浏览 更新于 3/12/2026

name: 重构 description: 重构代码以提高质量、减少技术债务和改善可维护性。用于清理任务和代码改进。

代码重构

在不改变行为的情况下提高代码质量。

何时使用

  • 代码难以理解或修改
  • 跨文件的重复逻辑
  • 函数/类过大
  • 减少技术债务
  • 在添加新功能之前

重构过程

  1. 确保测试存在 - 在重构前添加测试
  2. 小步骤 - 进行增量更改
  3. 运行测试 - 每次更改后验证
  4. 频繁提交 - 保持更改可逆

常见重构方法

提取函数

// 之前
function processOrder(order) {
  // 50行验证代码
  // 30行计算代码
  // 20行通知代码
}

// 之后
function processOrder(order) {
  validateOrder(order);
  const total = calculateTotal(order);
  notifyCustomer(order, total);
}

用多态替换条件

// 之前
function getPrice(type) {
  if (type === "regular") return basePrice;
  if (type === "premium") return basePrice * 1.5;
  if (type === "vip") return basePrice * 0.8;
}

// 之后
const pricingStrategies = {
  regular: (base) => base,
  premium: (base) => base * 1.5,
  vip: (base) => base * 0.8,
};
const getPrice = (type) => pricingStrategies[type](basePrice);

移除重复

// 之前
function getUserName(user) {
  return user?.profile?.name ?? "Unknown";
}
function getOrderName(order) {
  return order?.customer?.name ?? "Unknown";
}

// 之后
const getName = (obj, path) => path.reduce((o, k) => o?.[k], obj) ?? "Unknown";
const getUserName = (user) => getName(user, ["profile", "name"]);
const getOrderName = (order) => getName(order, ["customer", "name"]);

代码味道

味道 症状 重构方法
长函数 >20行 提取函数
大类 >200行 提取类
重复代码 相同逻辑重复 提取和重用
长参数 >3个参数 使用对象/构建器
特性嫉妒 使用其他类的数据 移动方法
原始痴迷 一切使用字符串 创建值对象

质量指标

  • 圈复杂度 - 每个函数保持在10以下
  • 嵌套深度 - 最多3层
  • 函数长度 - 最好在20行以下
  • 文件长度 - 最好在300行以下

安全检查表

  • [ ] 测试存在并通过
  • [ ] 无预期行为改变
  • [ ] 更改是增量的
  • [ ] 每一步都提交
  • [ ] 请求代码审查

示例

输入: “这个函数太长了” 操作: 识别逻辑部分,提取为专注的函数,验证测试通过

输入: “减少这些文件中的重复” 操作: 找到常见模式,提取共享工具,更新调用点