我使用过 Django 一些,我非常喜欢它的项目/应用程序模型:您可以通过组装一个或多个 Django 应用程序来构建 Django 项目。这些应用程序可以是自治的,或者某些应用程序可以构建在其他应用程序之上。一个应用程序可以轻松地依赖另一个应用程序的模型,以及它的控制器(Django 家伙称它们为“视图”),甚至它的视图(Django 中的“模板”)。

我现在正在从事一个相对较大规模的 Ruby on Rails 项目,我很惊讶地发现在 Rails 中显然没有简单的方法可以做同样的事情。基本上,在 Rails 中,一个项目 = 一个应用程序。我们的项目一开始是一个巨大的单体应用程序,现在我们正在尝试找出如何将其分割成更小的块。

例如,我们当前的应用程序允许我们管理合作伙伴和合同(除其他外)。我想要一个“合作伙伴”应用程序来管理我们的合作伙伴(地址、联系人等)和一个“合同”应用程序来管理我们与合作伙伴的合同。“合同”应用程序将依赖于“合作伙伴”应用程序(但为了避免循环依赖,我希望“合作伙伴”应用程序不了解“合同”应用程序)。

目前,我认为主要选项如下:

  1. 使这些应用程序通过 REST 请求进行通信(每个应用程序将充当 Web 服务):这很好,但它似乎禁止重用其他应用程序的视图。例如,如果“合作伙伴”应用程序有一个很好的页面来显示合作伙伴的详细信息,并且如果我想在合同详细信息页面的中间显示该页面(稍加修改),我看不到其他方法这比让“合同”应用程序通过 REST 请求向“合作伙伴”应用程序询问合作伙伴详细信息(它将获得对象表示,而不是视图),然后从“合同”应用程序复制/粘贴合作伙伴详细信息页面的源代码。合作伙伴”应用程序到“合同”应用程序。
  2. 将这些应用程序变成插件:不太好,而且有点困难,但似乎允许模型和视图重用
  3. 使用 svn external 在应用程序之间共享一些模型:简单但丑陋。

感谢您的建议。

有帮助吗?

解决方案

由于这是我也希望能够做到的事情,我可以提供四个 - 不完整且相对未经测试(由我)的“解决方案”:

排名不分先后...

  1. 使用导轨 引擎 插件,显然现在可以在 2.2 上使用。这在某种程度上或全部可能会被纳入 Rails 2.3(见下文)

  2. 切换到默布, 哪 有一种叫做“切片”的东西, 可能会提供您正在寻找的内容。无论如何,如果 是正确的(我有什么好怀疑的 耶胡达·卡茨?一切都是一样的 反正总有一天,这很酷。

  3. 看看 引擎功能 在 Edge Rails 中(“Edge”是最新提交但未发布的版本,因此它通常可以工作,但可能还没有达到 100% 的生产质量)。

  4. 考虑使用 routes.rb 中的命名空间 - 分配一个项目 app 到命名空间意味着您可以将其放入相关的子目录中 app 子目录,尽管这可能不太干净,因为每个“应用程序”都有一组单独的 Rails 目录。

其中,我没有 (2) 的经验,因为我(在基础设施方面)与 Rails 紧密相连,但没关系,我喜欢 Rails。我打算看看(1),也许(3),因为 2.3 可能会在我需要部署下一个主要版本之前发布,并且我已经尝试过(4),它可以工作,但是,嗯,繁琐并且(对我来说)有点令人困惑。

其他提示

如果你想研究 Mike 的第二个选项,Merb 切片有 有关该主题的有用截屏视频.

我使用了 Desert 插件(以前称为“plugins plus”)。看起来效果很好。http://github.com/pivotal/desert/tree/master

我对 RoR 的看法是将你的“应用程序”编写为 Rails 中的控制器。他们可以非常独立,但可以分享帮助者和观点。我不了解 Django,所以也许术语不同。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top