当前位置:  开发笔记 > 后端 > 正文

如何将大型Rails应用程序切割成可以协同工作的小型应用程序?

如何解决《如何将大型Rails应用程序切割成可以协同工作的小型应用程序?》经验,为你挑选了1个好方法。

我和Django有点合作,我非常喜欢它的项目/应用程序模型:你可以通过组装一个或多个Django应用程序来构建一个Django项目.这些应用程序可以是自治的,或者某些应用程序可以构建在其他应用程序之上.应用程序可以轻松地依赖于另一个应用程序的模型,以及它的控制器(Django dudes称之为"视图")甚至它的视图(Django中的"模板").

我现在正在开发一个相对大规模的Ruby on Rails项目,我很惊讶地发现在Rails中显然没有简单的方法可以做同样的事情.基本上,在Rails中,一个项目=一个应用程序.我们的项目已经开始作为一个巨大的单片应用程序,我们现在正试图找出如何将其拆分为更小的块.

例如,我们当前的应用程序允许我们管理合作伙伴和合同(以及其他事项).我希望有一个"合作伙伴"应用程序来管理我们的合作伙伴(地址,联系人等)和"合同"应用程序,它将管理我们与合作伙伴的合同."合同"应用程序将依赖于"合作伙伴"应用程序(但为了避免循环依赖,我希望"合作伙伴"应用程序不了解"合同"应用程序).

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

    使这些应用程序通过REST请求进行通信(每个应用程序将充当Web服务):这很好,但它似乎禁止重用其他应用程序的视图.例如,如果"合作伙伴"应用程序有一个很好的页面来显示合作伙伴的详细信息,并且如果我想显示该页面,稍微修改一下,在合同详细信息页面的中间,我看不到其他方法可以做这是让"合同"应用程序通过REST请求向"合作伙伴"应用程序询问合作伙伴详细信息(它将获得对象表示,而不是视图),然后复制/粘贴合作伙伴详细信息页面的源代码来自"合作伙伴"app"到"合同"应用程序.

    将这些应用程序转换为插件:不是很好,而且有点困难,但似乎允许模型和视图重用

    使用svn external从应用程序到应用程序共享一些模型:简单但难看.

谢谢你的建议.



1> Mike Woodhou..:

由于这是我也想做的事情,我可以提供四个 - 不完整且相对未经测试(由我)"解决方案":

没有特别的顺序......

    使用Rails 引擎插件,它现在显然适用于2.2.这在某种程度上可能会进入Rails 2.3(见下文)

    切换到 Merb,它有一些叫做"切片"的东西可能会提供你想要的东西.无论如何,如果 这 是正确的(我是谁,我怀疑耶胡达卡茨?)无论如何,总有一天会是同样的事情,这很酷.

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

    查看在routes.rb中使用名称空间 - 将名称分配app给名称空间意味着您可以将其放入相关app子目录中的子目录中,尽管对于每个"应用程序"都有一组单独的Rails目录可能不那么干净.

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

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有