用途:为现代 Rails 8 项目提供架构决策指导,回答“这段代码该放哪里”,并统一项目约定与分层职责。
主要能力:提供架构决策树,按数据校验与关联、跨模型共享行为、业务状态跟踪、多模型编排或外部 API 调用、复杂查询、视图格式化、授权逻辑、可复用 UI、异步任务、复杂表单、事务邮件、HTTP 处理等场景,分别指向模型、Concern、状态记录、服务对象、查询对象、Presenter、Pundit 策略、ViewComponent、Job、表单对象、Mailer、控制器。给出“三法则”:影响 1 个模型留在模型,2 个模型考虑 Concern 或模型方法,3 个及以上抽取服务对象。列出各层职责与不应包含的内容,以及何时不该抽象、何时该抽象的判断信号。
项目约定:测试用 Minitest + fixtures,不用 RSpec 或 FactoryBot;组件用 ViewComponents,简单一次性场景可用 partial;授权用 Pundit 策略,默认拒绝;任务用 Solid Queue,浅任务,命名 _later/_now;前端用 Hotwire(Turbo + Stimulus)与 Tailwind CSS;业务状态用状态即记录,布尔值仅用于技术标志;架构以富模型优先,服务对象用于多模型编排;路由遵循一切皆 CRUD;质量用 RuboCop(omakase)与 Brakeman。
使用方式:按决策树定位代码归属,遵循分层职责与目录结构(app 下含 components、forms、jobs、mailers、models/concerns、policies、presenters、queries、services 等)。服务对象统一返回 Result 对象,包含 success、data、error、code。测试按层选择单元、集成、组件或系统测试。
适用场景:Rails 8 项目的架构设计、代码评审与重构决策。
限制:资料未提供安装命令、收费方式、平台支持与效果数据;示例代码仅为说明性片段,实际采用需结合项目情况。