【问题标题】:How do can I implement Modularization in a Rails App?如何在 Rails 应用程序中实现模块化?
【发布时间】:2012-03-07 18:36:16
【问题描述】:

Breaking a large rails app into smaller apps?

Modularizing Rails applications

Best practice for structuring a 'large' Rails app

我有一个关于大型 Rub​​y on Rails 应用程序模块化的快速问题。

设置:

我正在构建一个核心应用程序来存储有关人员的信息。我还有几个“模块”以非常不同的方式使用这些信息。 (例如,一个可以显示有关人员的信息,另一个可以找出他们之间的联系和共性等)。

问题:

如何有效地模块化这个应用程序?

可能的答案:

由于模块与核心应用程序(以及彼此)共享模型和视图,因此将它们组合成一个应用程序对我来说是有意义的。但是,随着应用程序的增长,这显然会导致问题。这对我来说建议命名空间控制器和模型“How to organize controller in moderately large Rails application?”或使用引擎“Modularizing Rails applications”。

由于模块正在积极开发中,因此在它们上使用 rails 生成器非常有帮助,这似乎让使用引擎变得很痛苦。从 Rails 的角度来看,虽然引擎得到了完全的支持,但在缺乏生成器支持和数据库迁移方面,它们似乎仍然相当老套。有人有成功开发引擎的经验吗?如果您有一个可以工作的应用程序并希望将其移植到插件中(即复制粘贴代码),那么引擎似乎是一个很好的解决方案,但如果您正在积极开发它(更改模型等),这将很困难。

我看到的最后一件事是使用多个应用程序和一个数据库。这种方式似乎是迁移和保持模型笔直等的皇家痛苦。但我想我也会对此有所思考。

【问题讨论】:

  • 链接到 SO 问题的好方法 - 不知道它存在!
  • “我正在构建一个核心应用程序来存储关于 [whatever] 的信息。我还有几个‘模块’以非常不同的方式使用这些信息。”这可以描述几乎所有构建的 Rails 应用程序! :-) 你能更具体地了解你的驱动程序吗?至少告诉我们您认为您将拥有多少个实体。

标签: ruby-on-rails ruby modularization


【解决方案1】:
【解决方案2】:

我不会使用引擎。引擎旨在用于在应用程序之间共享功能。您要做的不是共享功能,而是组织它。

为了组织你的代码,你可以做很多事情。

  • 使用命名空间。
  • 保持控制器纤薄。
  • 让您的模型保持纤薄(是的,您的模型;请参阅下一个要点)
  • 使用数据上下文交互 (DCI) 模式。
  • 使用 Apotomo 或 Cells 等小部件框架。
  • 编写测试,以便重构。
  • 如果您的应用的责任增长过快,请考虑采用面向服务的架构(考虑超媒体 API 设计)。

Andrzej 有很多关于 DCI 的文章。

http://andrzejonsoftware.blogspot.com/2011/08/dci-patterns-how-to-write-dci-contexts.html

【讨论】:

    【解决方案3】:
    • 一个应用程序,一个数据库。
    • 在模块之间共享模型。
    • 为您的控制器和视图命名空间。
    • 测试。

    【讨论】:

      【解决方案4】:

      您也可以使用Rack Middleware 来处理特定的任务。

      对于您的大部分应用程序,引擎似乎是最好的解决方案——我也在考虑这样做。看起来你可以很容易地在引擎中define generators

      【讨论】:

        【解决方案5】:

        根据数据的结构和访问模式,将应用程序分成多个应用程序可能会很有用,此外,还可能通过(RESTful)API 提供数据访问权限。

        根据我的经验,当您的应用程序从中等规模增长到大型规模时,这可以实现最佳结构,并迫使您考虑结构和关注点分离。扩大规模通常也更容易。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多