Rails : 命名空间与引擎?

Rails : Namespacing vs Engines?

我在 PHP 世界工作了很长时间后才刚刚开始 Rails 项目。

这个项目处于非常早期的阶段,这意味着现在是进行重大更改的好时机,目前包括两个不同的 rails 模块,一个用于管理员,一个用于用户,两者都在单独的 rails 实例。我想做的是将两个项目合并到一个 rails 实例中,我相信这将在长期 运行 中提高应用程序的可管理性。

两个实例共享同一个数据库,并且每个实例都有一个用于身份验证的设计模型。我一直在记录自己合并这两个项目的方法,我想出了两个备选方案:第一个是创建两个命名空间,一个供用户使用,另一个供管理员使用,并共享模型和框架逻辑。第二个是为管理员和用户创建引擎,这看起来更简洁但更复杂。

我已经阅读了很多文档并且正在试验 rails,但此时我需要更有经验的意见。

在此先感谢您,我感谢您对此的看法。

命名空间和引擎都各有利弊。使用哪一个将取决于您的特定用例。在大多数情况下,我建议使用名称空间,因为它往往更容易并且省去一些麻烦。尤其是在共享数据模型时。但是,当您想在多个应用程序中共享共同的隔离行为时,引擎非常有用。

引擎

优点

  • 隔离相关功能。如果您有一些仅由其中一个引擎使用的 tables,这尤其有用,因为它们可以使用前缀为 table 的名称来管理自己的数据库迁移。
  • 可以在多个 Rails 应用程序中重复使用。 (在某些情况下)
  • 从单体 Rails 应用程序中提取代码的良好起点。
  • 减少开发人员在大型代码库的不同引擎上工作时破坏其他引擎之一的功能的可能性。

缺点

  • 完全由引擎组成的应用程序并不常见。因此,新工程师需要一些时间来适应一切设置方式。
  • 共享常用功能可能会令人沮丧。例如。样式表
  • 您很可能最终会以意想不到的方式在两个引擎之间共享代码。这带走了 Isolate related functionality 收益的一些价值。
  • 带有 Rails 插件的文本编辑器往往会出现奇怪的行为。例如,vim 插件快捷方式在插件目录
  • 中有时不起作用

命名空间

优点

  • 使用简单,已经有很多 Rails 约定可以遵循。
  • 共享资产和其他常用功能往往非常简单。
  • 文本编辑器 rails 插件完全支持。

缺点

  • 不清楚哪些模型或库对不同的命名空间很重要。