跳转至

Ruby 模式

本文件使用 Ruby 和 Rails 特定内容扩展 common/patterns.md。

首先遵循 Rails 方式

  • 对于小型和中型功能,从标准的 Rails MVC 和 Active Record 约定开始。
  • 当模型/控制器边界承担多个职责时,引入服务对象、查询对象、表单对象、装饰器或展示器。
  • 为抽取出的对象命名时,应依据其执行的業務操作,而不是使用 Manager 或 Processor 这类通用层名称。

持久化

  • 对于多主机生产 Rails 应用,除非现有平台有明确理由使用 MySQL 或 SQLite,否则优先使用 PostgreSQL。
  • Rails 8 基于 SQLite 的默认配置适合单主机或小型部署,但并不意味着自动适配共享的多服务系统。
  • 将原生 SQL 放在查询对象或模型作用域之后,并对所有动态值进行参数化。

后台作业和运行时服务

  • 对于绿地 Rails 8 应用,如果需要适中的吞吐量和简单部署,请使用 Solid Queue。
  • 如果需要成熟的 可观测性、高吞吐量、现有 Redis 基础设施,或 Pro/Enterprise 功能,请使用 Sidekiq。
  • 当 Solid Cache 和 Solid Cable 的部署模型适合应用时使用它们。当共享跨服务行为、高扇出或高级数据结构很重要时,使用 Redis。

前端

  • 对于服务器端渲染的 Rails 应用,优先使用基于 Turbo、Stimulus、Importmap 和 Propshaft 的 Hotwire。
  • 如果交互复杂性、现有产品架构或团队所有权能够证明引入额外客户端界面是合理的,请使用 React、Vue、Inertia.js 或独立的 SPA。
  • 让视图组件、局部模板和展示器专注于渲染决策。不要在模板中包含持久化和授权逻辑。

认证

  • 对于简单的会话认证和密码重置需求,使用 Rails 8 认证生成器。
  • 如果需求包含 OAuth、MFA、confirmable/lockable 流程、多模型认证,或大规模现有 Devise 足迹,请使用 Devise 或其他成熟的认证系统。

参考

有关服务边界和适配器模式,请参阅技能:backend-patterns。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 ev/ECC