mcpField
R
rails-architecture

rails-architecture

github.com/thibautbaissac开发67174 次安装21 周前更新
代码仓库

关于 rails-architecture

为 Rails 8 开发者提供架构分层与抽象时机参考,涵盖常见组件职责、测试策略和新功能检查清单。

主要功能

  1. 01按职责划分架构层
  2. 02判断何时提取抽象
  3. 03提供 Rails 8 模式建议
  4. 04按层规划测试
  5. 05新功能实施检查清单

适用场景

  1. 01规划新功能的代码分层
  2. 02决定复杂逻辑放置位置
  3. 03为各层设计测试
  4. 04评估是否需要抽取组件

安装

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

$npx skills add https://github.com/thibautbaissac/rails_ai_agents --skill rails-architecture

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

包含的文件

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

references/
error-handling.md
layer-interactions.md
query-patterns.md
service-patterns.md
testing-strategy.md

详细介绍

Modern Rails 8 架构模式

架构决策树

Where should this code go?
|
+- View/display formatting?       -> Presenter (@presenter-agent)
+- Complex business logic?        -> Service Object (@service-agent)
+- Complex database query?        -> Query Object (@query-agent)
+- Shared behavior across models? -> Concern (/rails-concern skill)
+- Authorization logic?           -> Policy (@policy-agent)
+- Reusable UI with logic?        -> ViewComponent (@viewcomponent-agent)
+- Async/background work?         -> Job (@job-agent, /solid-queue-setup skill)
+- Complex form (multi-model)?    -> Form Object (@form-agent)
+- Transactional email?           -> Mailer (@mailer-agent)
+- Real-time/WebSocket?           -> Channel (/action-cable-patterns skill)
+- Data validation only?          -> Model (@model-agent)
+- HTTP request/response only?    -> Controller (@controller-agent)

各层职责

层职责不应包含
ControllerHTTP、参数、响应业务逻辑、查询
Model数据、验证、关联显示逻辑、HTTP
Service业务逻辑、编排HTTP、显示逻辑
Query复杂数据库查询业务逻辑
Presenter视图格式化、徽章业务逻辑、查询
Policy授权规则业务逻辑
Component可复用的 UI 封装业务逻辑
Job异步处理HTTP、显示逻辑
Form复杂表单处理持久化逻辑
Mailer邮件编写业务逻辑
ChannelWebSocket 通信业务逻辑

何时不应抽象

情况保持简单不要创建
简单 CRUD(少于 10 行)保留在控制器中Service 对象
只使用一次内联代码抽象
只有 1-2 个条件的简单查询Model 作用域Query 对象
基本文本格式化Helper 方法Presenter
单一 Model 表单form_with model:Form 对象
无逻辑的简单局部模板PartialViewComponent

何时应抽象

信号操作
相同代码出现在 3 个以上位置提取为 concern/service
Controller 操作超过 15 行提取为 Service
Model 超过 300 行提取 concerns
复杂条件判断提取为 Policy/Service
查询连接 3 个以上表提取为 Query 对象
表单涉及多个 Model提取为 Form 对象

有关详细的抽取指南,请参阅 /extraction-timing skill。

核心模式

精简的控制器
# GOOD: Thin controller delegates to service
class OrdersController < ApplicationController
  def create
    result = Orders::CreateService.call(user: current_user, params: order_params)
    if result.success?
      redirect_to result.data, notice: t(".success")
    else
      flash.now[:alert] = result.error
      render :new, status: :unprocessable_entity
    end
  end
end
Service 使用 Result 对象

所有 Service 都返回一致的 Result 对象:

Result = Data.define(:success, :data, :error) do
  def success? = success
  def failure? = !success
end
默认采用多租户
# GOOD: Scoped through account
def index
  @events = current_account.events.recent
end

Rails 8 特有功能

功能用途Skill/Agent
身份验证has_secure_password 生成器/authentication-flow
后台作业Solid Queue(由数据库支持)/solid-queue-setup, @job-agent
实时功能Action Cable + Solid Cable/action-cable-patterns
缓存Solid Cache(由数据库支持)/caching-strategies
资源Propshaft + Import Maps(内置)
部署Kamal 2 + Thruster(内置)

按层划分的测试策略

层测试类型重点
Model单元测试验证、作用域、方法
Service单元测试业务逻辑、边界情况
Query单元测试查询结果、租户隔离
Presenter单元测试格式化、HTML 输出
Controller请求测试集成、HTTP 流程
Component组件测试渲染、变体
Policy单元测试授权规则
System端到端测试关键用户路径

新功能检查清单

  1. Model - 定义数据结构(@migration-agent、@model-agent)
  2. Policy - 添加授权规则(@policy-agent)
  3. Service - 为复杂逻辑创建(@service-agent)
  4. Query - 为复杂查询添加(@query-agent)
  5. Controller - 保持精简(@controller-agent)
  6. Presenter - 格式化以供显示(@presenter-agent)
  7. Component - 构建可复用的 UI(@viewcomponent-agent)
  8. Mailer - 添加事务性邮件(@mailer-agent)
  9. Job - 添加后台处理(@job-agent)

参考资料

评论

支持 Markdown