繁体   English   中英

如何组织Rails应用程序

[英]How to organize a Rails App

我第一次创建了一个非常复杂的Rails应用程序。

我想知道按文件夹组织该应用程序的最佳方法是什么。 到现在为止,我会在一个应用程序(所有模型,控制器,etC)下做所有事情但是阅读一些开源代码我意识到他们把所有东西放在不同的应用程序下。

例如Spree Commerce。 他们有一个通用文件夹,里面有不同的应用程序(API,核心,管理员等)。 这是怎么做的,这是最好的方法吗?

我想指出最好的方法(书,博客,任何东西),这样我就能理解如何构建我的应用程序以便将来维护。

谢谢

另外,我认为你的问题的标题有点令人困惑。 Rails通过使用约定优于配置来定义“如何组织Rails应用程序”。 我认为你的问题是关于如何构建你的应用程序而不是任何特定于Rails的东西。 也许调整标题?

除此之外,如果不知道有关您项目的任何细节,这是一个棘手的问题,但我会试一试。

所有应用程序应该从简单开始,如果你相信(就像我一样)你应该从构建可能有效的最简单的东西开始。 鉴于此,既然您正在使用Rails,那么最简单的方法就是将您的应用程序构建为一个vanilla Rails 3应用程序。 这可能(我说'可能'因为我不知道有关该应用程序的任何细节)允许您快速获得应用程序的测试版并运行,而不必担心在项目开发的这个阶段的复杂性不是问题。

如果你需要创建一个基于XML或JSON的API,那么Rails使用标准框架可以很容易地实现这一点,这样你就可以花更多的时间来考虑API设计,而不是如何编写它,而API的设计就是最重要的是要在第一时间做到正确。

同样,您的管理站点可以只是位于不同命名空间中的同一个应用程序的一部分。 如果你以后发现你想要它作为一个单独的应用程序的行,你可以这样做(也许你可以使用你设计的那个很棒的API来促进这个),但是为什么要用这个增加的复杂性来设计它(因此延长了开发时间) )首先,如果你没有充分的理由这样做?

一旦您的应用程序启动并运行并且人们开始使用它,您就会开始了解瓶颈所在的位置以及可以改进设计的位置。 在此阶段,如果有需要,您可以开始将应用程序的各个部分移动到可扩展的解决方案,例如将API作为独立服务运行,引入缓存,更改数据存储以及其他改进和优化。

即使你的应用程序非常成功(我希望它是!)然后重新设计你的应用程序惠斯特继续运行现有的服务仍然是完全可能的,正如Twitter已经证明的那样。 只要坚持Knuth的陈述 ,你就会好起来的。

关于阅读材料,这是一个棘手的问题。 对我来说,很多XP和敏捷开发经典教会了我很多关于如何处理程序和应用程序设计的知识。 我还要查看这个StackOverflow主题以获取图书灵感。

祝好运!

Spree使用Rails的RailtiesRails :: Engines )。 Rails 3中引入了铁轨,使其更加模块化,易于扩展。 Rails 3本身是Railties(ActiveSupport,ActiveModel,ActiveRecord等)的集合。

如果你正在开发一个复杂的应用程序,我建议花一些时间来规划其架构。 在没有任何初步规划的情况下设计复杂的应用程序肯定会导致维护噩梦。 它还为新团队成员引入了巨大的学习曲线,减慢了新功能的引入速度,当然还有挫败感。

无论如何,不​​要过度优化,但不要忘记根据您的需求设计您的架构。

恕我直言,我将创建非常复杂的项目作为一个应用程序。 我有理由相信Spree和Radiant在单独的应用程序下构建,因此在他们的开源社区的借口下,贡献者可以轻松地贡献代码,而不会篡改核心数据和应用程序的核心工作。

否则,您应该将其构建为一个应用程序。 保持整洁。

这是RoR开发多年来让我保持理智的原因:

  1. 我使用Rails引擎,但将它们保存在与主应用程序相同的代码库中。 这是模块化Rails应用程序的良好入门者: https//github.com/shageman/the_next_big_thing

  2. 无论我在哪里,我都可以尝试减少耦合并使用成分来使事情易于测试,可重复使用和可维护。 这有助于最终将模块或引擎提取为单独的gem。 组合通过路由(安装),目录覆盖(资产),依赖注入或配置来完成。

  3. 如果我不需要重新使用引擎,我将它放在与主要应用程序相同的代码库中,即单个部署单元。 多亏了我不需要在我的IDE中切换项目。 在开发环境中,Rails重新加载机制会立即获取对引擎代码的任何更改。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM