用途:当任务是把现有代码从 Rails 宿主应用迁移进一个 Rails engine 时使用本技能。适用于把某个内聚功能从宿主中抽离、划定引擎边界并用宿主契约对接。
核心原则:偏好增量抽取而非一次性大重写;先保持行为不变,再改进设计。硬性门槛(HARD-GATE):不得在同一步中既抽取又改变行为;重构与改进应放在迁移完成并验证后的独立步骤。
流程:识别要抽取的单一内聚职责;列出对宿主应用的硬依赖(模型、服务、配置);定义未来的 engine 边界与宿主契约;先迁移稳定的领域逻辑(PORO、服务、值对象、策略、查询对象),推迟对宿主模型的直接引用、认证、路由归属与静态资源集成;对宿主拥有的依赖加适配器或配置接缝,用配置值、适配器对象或服务接口替换硬编码的宿主引用;在接缝清晰后再迁移控制器、路由、视图或作业;每个切片都保持回归测试通过。每个切片须满足:单一内聚职责、尽量少的新公开 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,随后运行 bundle exec rspec spec/services/pricing/ spec/requests/orders/ 验证回归。宿主依赖用适配器,如 config.current_user_provider.call(request)。输出风格:一次只提议一个有界抽取切片,列出移动的文件、新边界和要跑的回归测试。语言默认英文。可链式调用 create-engine(结构、宿主契约、命名空间)、test-engine(dummy 应用、回归与集成验证)、refactor-code(抽取前后的行为保持重构)。限制:资料未提供具体版本要求、安装步骤、收费或平台信息。