mcpField
E
extract-engine

extract-engine

github.com/igmarin开发2838 次安装4 周前更新
代码仓库

关于 extract-engine

extract-engine 是将 Rails 应用中的现有代码迁入 engine 的技能,面向渐进式代码拆分。它强调每次提取一个边界明确的部分、保持行为不变,并通过适配器处理宿主依赖和回归测试。

主要功能

  1. 01规划有限范围的代码提取
  2. 02分析依赖与边界
  3. 03先迁移领域逻辑,再迁移 Web 层
  4. 04用适配器隔离宿主依赖
  5. 05设置回归测试检查点

适用场景

  1. 01从 Rails 应用提取服务
  2. 02通过适配器隔离宿主依赖
  3. 03规划渐进式 engine 迁移

安装

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

$npx skills add https://github.com/igmarin/rails-agent-skills --skill extract-engine

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

包含的文件

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

assets/
checklist.json
examples.md
references/
adapter_examples.md

详细介绍

提取 Engine

当任务是将现有代码从 Rails 应用移至 engine 时,使用此技能。 优先采用渐进式提取,而非大规模重写。先保留行为,再改进设计。

快速参考

阶段重点
准备确定边界清晰的功能和宿主依赖项
逻辑首先迁移稳定的领域逻辑(PORO、服务)
接缝为宿主依赖项添加适配器/配置
Web最后迁移控制器、路由、视图

硬性门槛

DO NOT extract and change behavior in the same step.
Extraction must preserve existing behavior; refactoring and improvements belong in a separate step after the move is complete and verified.

核心流程

  1. 确定要提取的边界清晰的功能——一项职责明确的功能。
  2. 列出对宿主应用的硬依赖(模型、服务、配置)。
  3. 定义未来的 engine 边界和宿主契约。
  4. 首先迁移稳定的领域逻辑:PORO、服务、值对象、策略、查询对象。暂缓处理直接引用宿主模型、身份验证、路由归属和资源集成。
  5. 为宿主拥有的依赖项添加适配器或配置接缝。用配置值、适配器对象或服务接口替换硬编码的宿主引用。
  6. 只有在接缝明确后,才迁移控制器、路由、视图或任务。
  7. 在每个切片的整个过程中,确保回归测试持续通过。

每个切片都必须具备:一项职责明确的功能、尽可能少的新公共 API、通过的回归测试,以及明确的下一步。

扩展资源

注意事项

注意事项应对方法
一次提取过多内容每一步只处理一个边界清晰的切片
engine 中直接引用宿主使用适配器或配置
将行为变更与提取混在一起先保留行为;之后再重构
引入循环依赖每个切片开始前验证导入关系图
宿主契约不明确明确记录并测试宿主应用契约

示例

第一个切片(迁移 PORO,暂不迁移宿主模型):

mkdir -p my_engine/app/services/my_engine
mv app/services/pricing/calculator.rb my_engine/app/services/my_engine/pricing_calculator.rb
# Before (in host app): module Pricing; class Calculator
# After (in engine):
module MyEngine
  class PricingCalculator
    def initialize(line_items)
      @line_items = line_items
    end

    def total
      @line_items.sum { |item| item.price * item.quantity }
    end
  end
end

继续之前,确认回归测试仍然通过:

bundle exec rspec spec/services/pricing/ spec/requests/orders/

宿主依赖项的适配器:

module MyEngine
  def self.current_user_for(request)
    config.current_user_provider.call(request)
  end
end

# usage
OrderCreator.for_request(request) # resolves via MyEngine.current_user_for(request)

输出风格

  1. 每次提出一个小而边界清晰的提取切片。
  2. 概述要迁移的文件、新边界,以及要运行的回归测试。
  3. 语言——除非另有明确要求,否则必须使用英语。

集成

技能何时串联
create-engine提取后设计 engine 结构、宿主契约和命名空间
test-engineDummy 应用、回归测试、集成验证
refactor-code在提取切片之前或之后进行保留行为的重构

评论

支持 Markdown