mcpField
R
refactoring

refactoring

github.com/krzysztofsurdy开发3652 次安装3 天前更新
代码仓库

关于 refactoring

面向开发者的 PHP 8.3+ 重构参考,涵盖重构技巧、代码异味及实用指导,帮助以小步验证的方式改善代码结构。

主要功能

  1. 0189 种重构技巧与代码异味
  2. 02PHP 8.3+ 示例及原理说明
  3. 03分步变更指南
  4. 04变更前后对照
  5. 05重构实践建议

适用场景

  1. 01选择方法或类的重构技巧
  2. 02代码审查时识别代码异味
  3. 03结合测试规划安全变更

安装

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

$npx skills add https://github.com/krzysztofsurdy/code-virtuoso --skill refactoring

安装后在 Claude Code 中输入/refactoring确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
add-parameter.md
alternative-classes-with-different-interfaces.md
change-bidirectional-association-to-unidirectional.md
change-reference-to-value.md
change-unidirectional-association-to-bidirectional.md
change-value-to-reference.md
collapse-hierarchy.md
comments.md
consolidate-conditional-expression.md
consolidate-duplicate-conditional-fragments.md
data-class.md
data-clumps.md
dead-code.md
decompose-conditional.md
divergent-change.md
duplicate-code.md
duplicate-observed-data.md
encapsulate-collection.md
encapsulate-field.md
extract-class.md
extract-interface.md
extract-method.md
extract-subclass.md
extract-superclass.md
extract-variable.md
feature-envy.md
form-template-method.md
hide-delegate.md
hide-method.md
inappropriate-intimacy.md

详细介绍

重构

一份全面的参考资料,涵盖 89 种重构技巧和代码异味——包含 PHP 8.3+ 示例、原理、分步操作说明以及前后对比。

重构技巧(67 种)

组合方法
  • 提取方法 — 将代码片段提取到命名方法中 → 参考
  • 内联方法 — 用方法体替换方法调用 → 参考
  • 提取变量 — 通过说明性变量为复杂表达式赋予有意义的名称 → 参考
  • 内联临时变量 — 用表达式替换临时变量 → 参考
  • 以查询替换临时变量 — 用方法调用替换临时变量 → 参考
  • 拆分临时变量 — 为不同用途分别赋值给不同变量 → 参考
  • 移除对参数的赋值 — 引入局部变量,而非重新赋值给参数 → 参考
  • 以方法对象替换方法 — 将复杂方法转换为独立的类 → 参考
  • 替换算法 — 用更清晰的替代方案替换算法 → 参考
在对象之间移动特性
  • 移动方法 — 将方法移至最依赖它的类中 → 参考
  • 移动字段 — 将字段移至最依赖它的类中 → 参考
  • 提取类 — 拆分职责过多的类 → 参考
  • 内联类 — 合并职责过少的类 → 参考
  • 隐藏委托关系 — 引入隐藏委托链的方法 → 参考
  • 移除中间人 — 允许客户端直接调用委托对象 → 参考
  • 引入外部方法 — 为无法修改的类添加缺少的方法 → 参考
  • 引入本地扩展 — 为库类构建包装器或子类 → 参考
组织数据
  • 自封装字段 — 即使在类内部,也通过 getter 访问字段 → 参考
  • 以对象替换数据值 — 将原始数据提升为功能丰富的对象 → 参考
  • 将值改为引用 — 将值对象转换为引用对象 → 参考
  • 将引用改为值 — 将引用对象转换为值对象 → 参考
  • 以对象替换数组 — 用合适的对象替换作为数据结构使用的数组 → 参考
  • 复制被观察数据 — 通过 Observer 让领域数据与 UI 保持同步 → 参考
  • 将单向关联改为双向关联 — 在需要时引入反向引用 → 参考
  • 将双向关联改为单向关联 — 消除不必要的反向引用 → 参考
  • 以符号常量替换魔法数字 — 为魔法数字指定有意义的名称 → 参考
  • 封装字段 — 限制字段可见性,并提供访问器 → 参考
  • 封装集合 — 提供集合的只读视图 → 参考
  • 以类替换类型码 — 用枚举或类替换类型码 → 参考
  • 以子类替换类型码 — 用类层次结构替换类型码 → 参考
  • 以状态模式/策略模式替换类型码 — 用状态模式/策略模式替换会影响行为的类型码 → 参考
  • 以字段替换子类 — 消除仅在常量上有所不同的子类 → 参考
简化条件表达式
  • 分解条件表达式 — 将复杂条件表达式拆分为命名方法 → 参考
  • 合并条件表达式 — 合并会产生相同结果的条件 → 参考
  • 合并重复的条件代码片段 — 将相同代码移到条件表达式之外 → 参考
  • 移除控制标志 — 用 break/return/continue 替换控制标志 → 参考
  • 以卫语句替换嵌套条件表达式 — 使用提前返回简化嵌套条件表达式 → 参考
  • 以多态替换条件表达式 — 用多态方法调用替换条件表达式 → 参考
  • 引入空对象 — 用空对象替换空值检查 → 参考
  • 引入断言 — 插入断言以记录假设 → 参考
简化方法调用
  • 重命名方法 — 选择能体现方法用途的名称 → 参考
  • 添加参数 — 引入新参数以支持更多数据 → 参考
  • 移除参数 — 删除未使用的方法参数 → 参考
  • 将查询与修改分离 — 拆分同时返回值并更改状态的方法 → 参考
  • 参数化方法 — 通过添加参数统一相似的方法 → 参考
  • 将参数替换为显式方法 — 为每个参数值创建单独的方法 → 参考
  • 保留整个对象 — 传递整个对象,而非单独的值 → 参考
  • 将参数替换为方法调用 — 在内部推导值,而不是传入值 → 参考
  • 引入参数对象 — 将相关参数封装到一个对象中 → 参考
  • 移除设置方法 — 删除仅在创建时赋值的字段对应的 setter → 参考
  • 隐藏方法 — 缩小未使用的公共方法的可见范围 → 参考
  • 将构造函数替换为工厂方法 — 使用工厂方法创建复杂对象 → 参考
  • 将错误代码替换为异常 — 抛出异常,而不是返回错误代码 → 参考
  • 将异常替换为测试 — 预先验证条件,而不是捕获异常 → 参考
处理泛化
  • 上移字段 — 将相同的字段提升到超类中 → 参考
  • 上移方法 — 将相同的方法提升到超类中 → 参考
  • 上移构造函数体 — 将共享的构造函数逻辑提升到超类中 → 参考
  • 下移方法 — 将方法移至使用它的子类中 → 参考
  • 下移字段 — 将字段移至使用它的子类中 → 参考
  • 提取子类 — 为一部分特性提取子类 → 参考
  • 提取超类 — 将共享行为提取到父类中 → 参考
  • 提取接口 — 为常见操作定义共享接口 → 参考
  • 折叠层次结构 — 当超类和子类过于相似时将它们合并 → 参考
  • 形成模板方法 — 将相似方法泛化为模板 → 参考
  • 用委托替换继承 — 用组合替代继承 → 参考
  • 用继承替换委托 — 用继承替代过度委托 → 参考

代码异味(22)

膨胀类
  • 过长方法 — 方法变得过于冗长 → 参考
  • 过大的类 — 试图处理太多事情的类 → 参考
  • 基本类型偏执 — 过度使用基本类型,而不是小型对象 → 参考
  • 过长参数列表 — 接受过多参数的方法 → 参考
  • 数据泥团 — 反复一起出现的数据组 → 参考
面向对象滥用
  • 接口不同的替代类 — 方法签名不匹配的相似类 → 参考
  • 被拒绝的馈赠 — 忽视继承行为的子类 → 参考
  • Switch 语句 — 本应使用多态的复杂 switch/match 结构 → 参考
  • 临时字段 — 仅在特定条件下填充的字段 → 参考
变更阻碍者
  • 发散式变化 — 单个类因许多互不相关的原因而被修改 → 参考
  • 平行继承体系 — 创建一个子类就必须创建另一个子类 → 参考
  • 霰弹式修改 — 单次变更需要修改许多类 → 参考
可有可无项
  • 注释 — 过多的注释掩盖了不清晰的代码 → 参考
  • 重复代码 — 多处存在相同或几乎相同的代码 → 参考
  • 数据类 — 只包含字段和 getter/setter 的类 → 参考
  • 死代码 — 无法到达或未使用的代码 → 参考
  • 惰性类 — 贡献过少、不值得存在的类 → 参考
  • 推测性通用性 — 为了“以防万一”而构建的未使用抽象 → 参考
耦合项
  • 依恋情结 — 相比自身数据,更依赖另一个类的数据的方法 → 参考
  • 不恰当的亲密关系 — 彼此深入访问对方内部实现的类 → 参考
  • 不完整的库类 — 未能提供所需功能的库类 → 参考
  • 消息链 — 很长的方法调用链(a.b().c().d())→ 参考
  • 中间人 — 只负责委托给另一个类的类 → 参考

最佳实践

  • 以小步、经过验证的方式重构——每次变更后都运行测试
  • 遵循童子军规则:让代码保持得比你发现时更好
  • 条件允许时,使用 IDE 重构工具进行安全、自动化的转换
  • 切勿同时重构并改变行为——将两者分开
  • 优先处理能降低耦合并提高内聚的重构
  • 优先处理最接近当前工作的代码异味

评论

支持 Markdown