mcpField
R
refactor-method-complexity-reduce

refactor-method-complexity-reduce

github.com/github开发40.5k10.0k 次安装今天更新
代码仓库

关于 refactor-method-complexity-reduce

这项编码技能通过提取职责明确的辅助方法来简化方法,同时保留原有行为。它要求运行测试、确认失败数为零且编译无误,并检查认知复杂度阈值。

主要功能

  1. 01识别认知复杂度来源
  2. 02提取职责明确的辅助方法
  3. 03保留验证与错误处理行为
  4. 04要求验证测试和编译结果
  5. 05检查目标复杂度阈值

适用场景

  1. 01降低长方法的复杂度
  2. 02拆分重复或特定类型的逻辑
  3. 03重构后验证行为是否保持

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/github/awesome-copilot --skill refactor-method-complexity-reduce

安装后在 Claude Code 中输入/refactor-method-complexity-reduce确认已加载。

详细介绍

重构方法以降低认知复杂度

目标

重构方法 ${input:methodName},通过将逻辑提取到职责单一的辅助方法中,将其认知复杂度降低到 ${input:complexityThreshold} 或以下。

说明

  1. 分析当前方法,找出认知复杂度的来源:

    • 嵌套条件语句
    • 多个 if-else 或 switch 链
    • 重复的代码块
    • 多个带条件的循环
    • 复杂的布尔表达式
  2. 识别可提取的机会:

    • 可以提取到单独方法中的校验逻辑
    • 重复出现的特定类型或特定分支处理
    • 复杂的转换或计算
    • 多次出现的常见模式
  3. 提取职责单一的辅助方法:

    • 每个辅助方法应只有单一、清晰的职责
    • 将校验逻辑提取到单独的 Validate* 方法中
    • 将特定类型的逻辑提取到处理程序方法中
    • 为常见操作创建工具方法
    • 使用合适的访问级别(static、private、async)
  4. 简化主方法:

    • 减少嵌套深度
    • 用更小的编排调用替换庞大的 if-else 链
    • 在合适的地方使用 switch 语句以实现更清晰的分派
    • 确保主方法读起来像高层流程
  5. 保留功能:

    • 保持相同的输入/输出行为
    • 保留所有校验和错误处理
    • 保留异常类型和错误消息
    • 确保所有参数都正确传递给辅助方法
  6. 最佳实践:

    • 当辅助方法不需要实例状态时,将其设为 static
    • 尽早使用空值检查和卫语句
    • 避免创建不必要的局部变量
    • 考虑使用元组返回多个值
    • 将相关的辅助方法放在一起

实现方式

  • 在重构主流程之前先提取辅助方法
  • 增量测试以确保没有回归
  • 使用有意义的名称来描述提取出的职责
  • 将提取出的方法放在使用它们的附近
  • 考虑将重复的代码模式改为泛型方法

结果

重构后的方法应:

  • 认知复杂度降低到目标阈值 ${input:complexityThreshold} 或以下
  • 更易读、更易维护
  • 关注点清晰分离
  • 更易测试和调试
  • 保留所有原始功能

测试与验证

关键:完成重构后,你必须:

  1. 运行所有现有测试,这些测试与被重构的方法及其周边功能相关
  2. 强制要求:明确验证测试结果显示 "failed=0"
    • 绝不要假设测试已通过 - 始终检查实际的测试输出
    • 搜索包含通过/失败计数的摘要行(例如 "passed=X failed=Y")
    • 如果摘要显示任何不是 "failed=0" 的数字,则测试已失败
    • 如果测试输出在文件中,请读取整个文件以找到并验证失败计数
    • 运行测试并不等同于验证测试通过
    • 在你明确确认零失败之前,不要继续
  3. 如果有任何测试失败(failed > 0):
    • 清楚说明有多少测试失败
    • 分析每个失败以了解哪些功能被破坏
    • 常见原因:空值处理、空集合检查、条件逻辑错误
    • 在重构后的代码中找出根本原因
    • 修正重构后的代码以恢复原始行为
    • 重新运行测试并验证输出中的 "failed=0"
    • 重复直到所有测试通过(failed=0)
  4. 验证编译 - 确保没有编译错误
  5. 检查认知复杂度 - 确认该指标等于或低于目标阈值 ${input:complexityThreshold}

确认检查清单

  • 代码编译无错误
  • 测试结果明确显示 "failed=0"(已通过阅读输出验证)
  • 所有测试失败均已分析并修正(如有发生)
  • 认知复杂度处于或低于目标阈值 ${input:complexityThreshold}
  • 所有原有功能均得到保留
  • 代码遵循项目约定和标准

评论

支持 Markdown