【问题标题】:Rails: Re-using models, controllers and even views between Rails applicationsRails:在 Rails 应用程序之间重用模型、控制器甚至视图
【发布时间】:2011-05-25 07:42:31
【问题描述】:

我有一个 Rails 应用程序,其中包含一些相当通用的功能(例如管理用户)。我想在其他 Rails 应用程序中使用该通用功能而不复制它。困难的部分似乎是这段代码包含许多模型、控制器和视图。

我知道 gems 和插件允许共享代码,但它们似乎更适用于共享实用程序和库功能,而不是应用程序的核心部分。

任何关于如何做到这一点的建议将不胜感激。

【问题讨论】:

  • 为什么不想复制代码?回答这个问题可能会有所帮助。

标签: ruby-on-rails ruby


【解决方案1】:

我们正在使用 Rails 引擎在客户端项目之间共享功能,并且已经取得了很大进展。引擎包含控制器、模型、视图,甚至路由。它提供了每个项目所需的核心功能(访问我们的内部内容管理系统),因此项目不必从头开始。

大部分代码的结构都可以在项目需要的地方轻松扩展或覆盖(主要是通过子类化)。它作为 gem 分发。

我无法向您展示代码(它不是开源的),但我可以为您指出一些有用的资源:

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    制作副本并不总是坏事。这就是为什么我问你不想复制代码的原因。

    如果您创建“库”,则必须确保每个应用程序都以相同的方式使用它。或者,您必须为使用它的应用程序之间的每一个可能差异准备“库”。

    如果您共享代码,您就是在向您的程序添加依赖项。该共享代码的任何更改都会影响多个应用程序。

    通常将代码复制到另一个应用程序要简单得多,因为这样您就可以应用任何修改而无需考虑其他人。

    您确定管理用户是如此通用,以至于您不会对其进行任何特定于应用程序的更改吗?

    【讨论】:

    • 复制代码一开始可能更容易,但它不是重用的解决方案。错误修复、重构、新功能和其他改进不能应用于没有手动、容易出错的工作的重复项。您基本上已经扼杀了控制代码未来的任何方式。不,我不同意:复制总是不好的。
    • @molf:重构和其他应用于共享代码的改进将杀死你的旧代码,否则它们会很好地工作。我不同意:共享代码并不总是好的。经验法则:如果它没有损坏,就不要修复它。如果一个组件在一个应用程序中工作,那么它可能不需要任何“更新”或“重构”。
    • 正确的版本控制和依赖管理使该论点无效:旧代码仍然可以使用,但您为旧版本引入了通用升级路径。
    • 说“旧代码”我不是指旧版本的库,而是使用相同库的旧应用程序。我相信只有真正通用的代码应该“共享”而不是“复制”——没有必要“复制”压缩库或数据库驱动程序。但是像提到的“管理用户”之类的东西通常过于特定于应用程序,无法在应用程序之间共享。它们在开始时可能看起来是通用的,但随着项目的发展,经常会出现对应用程序特定更改的需求。
    【解决方案3】:

    如何创建指向具有 MVC 的文件/目录的链接?这比复制要好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多