7

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

我现在正在处理一个相对较大的 Ruby on Rails 项目,我很惊讶地发现在 Rails 中做同样的事情显然没有简单的方法。基本上,在 Rails 中,一个项目 = 一个应用程序。我们的项目一开始是一个巨大的单体应用程序,现在我们正试图弄清楚如何将它分成更小的块。

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

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

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

感谢您的建议。

4

4 回答 4

5

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

没有特别的顺序...

  1. 使用 Rails引擎插件,它现在显然适用于 2.2。这在一定程度上或全部可能会融入 Rails 2.3(见下文)

  2. 切换到 Merb,它有一些称为“切片”的东西,可能会提供您正在寻找的东西。无论如何,如果 是正确的(我有什么资格怀疑 Yehuda Katz?)无论如何,总有一天,这一切都是一样的,这很酷。

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

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

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

于 2008-12-24T09:28:33.587 回答
2

如果您想调查 Mike 的 #2 选项,Merb 切片有一个关于该主题的截屏视频,很有帮助

于 2008-12-24T17:24:15.343 回答
2

我使用了沙漠插件(以前的“插件加”)。它似乎工作得很好。 http://github.com/pivotal/desert/tree/master

于 2008-12-29T04:31:11.203 回答
-2

我对 RoR 的看法是将您的“应用程序”编写为 Rails 中的控制器。他们可以非常独立,但可以共享助手和观点。我不知道 Django,所以术语可能不同。

于 2008-12-24T09:02:01.223 回答