11

将大型 Rails 应用程序拆分为较小的应用程序?

模块化 Rails 应用程序

构建“大型”Rails 应用程序的最佳实践

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

设置:

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

问题:

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

可能的答案:

由于模块与核心应用程序(以及彼此)共享模型和视图,因此将它们组合成一个应用程序对我来说是有意义的。但是,随着应用程序的增长,这显然会导致问题。这对我来说建议对控制器和模型进行命名空间“如何在中等大小的 Rails 应用程序中组织控制器? ”或使用引擎“模块化 Rails 应用程序”。

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

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

4

5 回答 5

1

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

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

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

Andrzej 有关于 DCI 的非常好的文章。

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

于 2012-03-07T10:36:16.860 回答
0
  • 一个应用程序,一个数据库。
  • 在模块之间共享模型。
  • 命名您的控制器和视图。
  • 测试。
于 2011-07-22T03:22:23.130 回答
0

您还可以使用机架中间件来处理特定任务。

对于您的大部分应用程序,引擎似乎是最好的解决方案——这也是我正在考虑做的事情。看起来你可以很容易地在引擎中定义生成器。

于 2012-03-07T10:03:19.050 回答
0

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

以我的经验,当您的应用程序从中型发展到大型时,这允许最佳结构,并迫使您考虑结构和关注点分离。扩大规模通常也更容易。

于 2012-03-07T10:32:21.243 回答