🚀 快速安装

复制以下命令并运行,立即安装此 Skill:

npx @anthropic-ai/skills install github/awesome-copilot/refactor-method-complexity-reduce

💡 提示:需要 Node.js 和 NPM

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

目标

重构方法 ${input:methodName},将其认知复杂度降低到 ${input:complexityThreshold} 或以下,方法是将逻辑提取到专注的辅助方法中。

说明

  1. 分析当前方法,识别认知复杂度的来源:
    • 嵌套的条件语句
    • 多个 if-else 或 switch 链
    • 重复的代码块
    • 包含条件的多个循环
    • 复杂的布尔表达式
  2. 识别可提取的机会
    • 可以提取到单独方法中的验证逻辑
    • 重复出现的类型特定或案例特定的处理
    • 复杂的转换或计算
    • 多次出现的通用模式
  3. 提取专注的辅助方法
    • 每个辅助方法应有单一的、清晰的职责
    • 将验证提取到单独的 Validate* 方法中
    • 将特定于类型的逻辑提取到处理程序方法中
    • 为通用操作创建工具方法
    • 使用适当的访问级别(静态、私有、异步)
  4. 简化主方法
    • 减少嵌套深度
    • 将庞大的 if-else 链替换为更小的编排调用
    • 在适当的地方使用 switch 语句以实现更清晰的分派
    • 确保主方法读起来像一个高层流程
  5. 保留功能
    • 保持相同的输入/输出行为
    • 保留所有验证和错误处理
    • 保留异常类型和错误消息
    • 确保所有参数正确传递给辅助方法
  6. 最佳实践
    • 当辅助方法不需要实例状态时,将其设为静态方法
    • 尽早使用空值检查和前置条件保护子句
    • 避免创建不必要的局部变量
    • 对于多个返回值,考虑使用元组
    • 将相关的辅助方法组合在一起

实现方法

  • 在重构主流程之前,先提取辅助方法
  • 逐步测试以确保没有退化
  • 使用描述所提取职责的有意义名称
  • 将提取的方法保留在它们被使用的位置附近
  • 考虑将重复的代码模式变成通用方法

结果

重构后的方法应:

  • 认知复杂度降低到目标阈值 ${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}
  • 所有原始功能均被保留
  • 代码遵循项目约定和标准

📄 原始文档

完整文档(英文):

https://skills.sh/github/awesome-copilot/refactor-method-complexity-reduce

💡 提示:点击上方链接查看 skills.sh 原始英文文档,方便对照翻译。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。