name: ruby-refactor description: Ruby 重构指南来自社区最佳实践。此技能应在重构、审查或重构 Ruby 代码时使用,以改进设计、可读性和可维护性。触发涉及代码异味、方法提取、条件简化、耦合减少、设计模式或 Ruby 习惯用法采用的任务。
社区 Ruby 重构最佳实践
Ruby 应用程序的综合重构指南,由社区维护。包含 45 条规则,分为 8 个类别,按影响优先级排序,以指导自动化重构和代码生成。
何时应用
参考这些指南当:
- 重构 Ruby 代码以减少复杂度并改进设计
- 从大单元中提取方法、类或值对象
- 简化复杂条件句和深度嵌套
- 减少类和模块之间的耦合
- 采用习惯的 Ruby 模式和现代 Ruby 3.x 特性
按优先级的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 结构与分解 | 关键 | struct- |
| 2 | 条件简化 | 关键 | cond- |
| 3 | 耦合与依赖 | 高 | couple- |
| 4 | Ruby 习惯用法 | 高 | idiom- |
| 5 | 数据与值对象 | 中高 | data- |
| 6 | 设计模式 | 中 | pattern- |
| 7 | 现代 Ruby 3.x | 中 | modern- |
| 8 | 命名与可读性 | 低中 | name- |
快速参考
1. 结构与分解(关键)
struct-extract-method- 将长方法提取为聚焦单元struct-extract-class- 提取类以实现单一职责struct-parameter-object- 引入参数对象以处理长签名struct-compose-method- 在单一抽象级别上组合方法struct-replace-method-with-object- 用方法对象替换复杂方法struct-single-responsibility- 每个类只有一个变更原因struct-flatten-deep-nesting- 通过早期提取展平深度嵌套
2. 条件简化(关键)
cond-guard-clauses- 用卫语句替换嵌套条件句cond-decompose-conditional- 将复杂布尔表达式提取为命名谓词cond-replace-with-polymorphism- 用多态替换 case/whencond-null-object- 用空对象替换 nil 检查cond-pattern-matching- 使用模式匹配进行结构条件cond-consolidate-duplicates- 整合重复的条件片段
3. 耦合与依赖(高)
couple-law-of-demeter- 通过委托强制执行迪米特法则couple-feature-envy- 移动方法以解决特征嫉妒couple-dependency-injection- 通过构造函数默认值注入依赖couple-composition-over-inheritance- 用组合对象替换混入couple-tell-dont-ask- 告诉对象做什么,不要查询其状态couple-avoid-class-methods-domain- 避免在领域逻辑中使用类方法
4. Ruby 习惯用法(高)
idiom-prefer-enumerable- 使用 map/select/reject 而非带有累加器的 eachidiom-keyword-arguments- 使用关键字参数以提高清晰度idiom-duck-typing- 使用 respond_to? 而非 is_a? 进行类型检查idiom-predicate-methods- 命名布尔方法带有 ? 后缀idiom-respond-to-missing- 始终将 method_missing 与 respond_to_missing? 配对idiom-block-yield- 使用 yield 而非 block.call 处理简单块idiom-implicit-return- 省略最后一个表达式的显式 return
5. 数据与值对象(中高)
data-value-object- 用值对象替换原始偏执data-define-immutable- 使用 Data.define 定义不可变值对象data-encapsulate-collection- 将集合封装在领域方法之后data-replace-data-clump- 用分组对象替换数据簇data-separate-query-command- 将查询方法与命令方法分离
6. 设计模式(中)
pattern-strategy- 将算法变体提取为策略对象pattern-factory- 使用工厂方法抽象对象创建pattern-template-method- 定义算法骨架的模板方法pattern-decorator- 用装饰器包装对象以添加行为pattern-null-object-protocol- 实现具有完整协议的空对象
7. 现代 Ruby 3.x(中)
modern-pattern-matching- 使用 case/in 进行结构模式匹配modern-deconstruct-keys- 实现 deconstruct_keys 用于自定义模式匹配modern-endless-methods- 使用无限方法定义简单方法modern-hash-pattern-guard- 使用带卫语句的模式匹配modern-rightward-assignment- 使用右赋值处理管道表达式
8. 命名与可读性(低中)
name-intention-revealing- 使用意图揭示名称name-consistent-vocabulary- 在整个代码库中对每个概念使用一个词name-avoid-abbreviations- 除了通用缩写外,拼写出名称name-rename-to-remove-comments- 重命名以消除对注释的需要
如何使用
阅读单个参考文件以获取详细解释和代码示例:
参考文件
| 文件 | 描述 |
|---|---|
| references/_sections.md | 类别定义和排序 |
| assets/templates/_template.md | 新规则的模板 |
| metadata.json | 版本和参考信息 |