Ruby on Rails开发流程/顺序

3
现在大学放暑假了,我的课程也结束了,我需要让自己的思维保持锋利。我决定尝试从头到尾制作一个足够好的 Ruby on Rails 应用程序。
我以前尝试过这样做,但问题总是出现在这里: “除非完成这个,否则不能真正完成那个,但似乎必须完成依赖于第一个东西的另一件事才能使其工作。” 基本上,我的项目很快失控,因为我没有方向指导我该何时工作。
我向你们伟大而睿智的 SO 社区提出问题,关于开发Rails应用程序最公认的方法是什么?
我应该从模型、视图还是控制器开始? 先制作 HTML 还是服务器端代码更好? 如何最好地完成任务?
在此先行致谢!

你尝试过“倒推法”吗?从你所设想的最终产品开始,然后向后推导,直到达到即时可行的任务... - richsinn
我尝试过这样做,但最终只是同时做了太多事情。我会开始处理一个视图,然后想到控制器的一个想法,就会跳进去处理控制器,然后当我回到视图时,为了让控制器的新功能正常工作,我必须重新启动某些东西...然后我就不断重复这个过程... - benbot
1
让我澄清一下。首先要向后规划。从最终产品开始,逆推而行,直到你认为有了即时的可行动项。然后再从这个点开始向前工作。你可能会有一些可以并行执行的项,但如果你向后规划,它会变得更加清晰明了。 - richsinn
太急于选择答案了,先生...像这样的抽象问题就像美酒一样年轻。 - wurde
4个回答

2
Rails社区强烈推崇某种形式的测试驱动开发。当你刚开始学习时,可能不需要编写测试,但你仍然可以保持相同的方法。
因此,你只需在浏览器中尝试所需内容,并在需要时编写所需内容以实现它。
那么,首先生成一个新的Rails应用程序并启动服务器。它会提供默认的Rails环境信息。你不希望这成为主页,所以你要进入routes.rb文件并定义你的根地址(例如root 'welcome#index')。
现在重新加载页面,你会得到错误“Uninitialized constant WelcomeController”。所以现在你需要一个控制器。添加控制器。
现在你会得到一个错误“无法找到WelcomeController的'index'操作”。在你的WelcomeController上定义索引操作。
现在你会得到错误“缺少模板welcome/index”。添加你的views/welcome/index.html.erb视图。
等等等等。
很快你会发现自己需要模型。像你想从视图中与之交互一样引用模型。例如@articles.each do |article|等。你会得到“未定义的nil方法”或类似的错误。
然后,你可以按照你在控制器中想要与之交互的方式来定义模型(例如@articles = Article.all)。然后你会得到一个错误,说你的模型不存在。创建模型。
在模型中添加你在视图中需要的属性。
重复这个过程……

1
  • 设计
  • 确定要实现哪些功能
  • 决定使用哪些宝石来实现这些功能
  • 在隔离环境中配置和实现这些宝石/功能-使用Git
    • 意识到你在这里花费了很多时间。
    • 考虑减少功能或简化设计。也许回到顶部。
  • 开始编写主应用程序-使用Git
  • 将这些宝石/功能一起配置-使用Git
  • 编写模型-使用Git
  • 尝试编写控制器和视图(使用脚手架开始,这样你会做更多的黑客工作而不是编码)-使用Git
  • 在最后三个步骤中遇到问题,或发现必须实现新功能才能使所有内容正常工作。
  • 在隔离环境中解决该问题(在单独的Rails应用程序中)-一定要使用Git
  • 重复

关于使用Git

Damien Roche在评论中建议使用Git分支代替在隔离环境中测试新工具。

我从一开始就在Rails中使用Git,并建议使用Git分支在隔离环境中测试新工具。

例如:您可以在这里看到我的公共Github存储库:https://github.com/spundun/emblem-coffee-emberjs-rails-starter-kit。 这是一个简单的单分支存储库,我在其中记录了每个逐步塑造项目的步骤。
但是,在使用新工具或库时,很多时候会出现问题,并且您将从一无所知开始,不知道为什么事情不按照教程中所说的方式运行。 我是否使用了错误版本的库? 错误版本的Rails? 我是否以错误的顺序添加了工具?
为了理解这些问题,很多时候您需要比较一个正常工作的目录和一个不正常工作的目录。 意思是您将想要并排拥有两个工作目录。
当然,您可以通过将一个目录克隆到另一个目录并检出两个不同的分支来实现上述目标,但我们正在超前自己。 在使一个宝石与您正在使用的其他十几个宝石共存之前,您应该确保知道如何在最简单的情况下使其正常工作。 意思是使用香草Rails,只使用所需的最少量。
首先,您需要创建一个孤立的分支,将新的 gem 整合到一个原始的 rails 应用程序中。这个分支与您的主分支没有任何关系,除了它应该使用您的应用程序所使用的相同版本的 rails。您可以将其托管在同一个存储库或单独的存储库中,真的并不重要。
一旦您对如何在隔离环境中运行 gem 感到自信,您可以使用该孤立分支的提交日志跟踪您所采取的所有步骤,并将这些提交适当地合并到您的主分支之上的功能分支中。当您完成修复错误并使所有 gem 和谐工作时,您的功能分支就准备好被合并到主分支中了。
希望对您有所帮助。

你所说的设计是指艺术风格还是应用程序应该做什么? - benbot
整体上设计应用程序。风格可能应该是最后的优先事项,但我相信这取决于个人偏好。但在这种情况下,设计您所设想的应用程序齿轮如何协同工作。 - Spundun
1
不要运行单独的Rails应用程序来隔离开发功能,我建议您使用git分支,并可能遵循类似于git-flow的模型。 - Damien Roche
+1 一个git-flow参考。我忘了提及我有多么依赖版本控制。 - wurde
1
@DamienRoche:我已经回复了关于我的答案中Git的评论。 - Spundun

1
我认为这是一个好问题,期待在这里看到一些有见地的答案。在我看来,这需要通过实践才能掌握,并且你将不断地在M、V和C之间切换。我认为模型通常是首先要实现的部分,因为它往往由真实世界的问题域确定,因此更加稳定和客观。然后是控制器和视图。如果你每次迭代只实现最小的工作部分,你就可以更快地看到结果,并且有助于避免陷入困境。(虽然我喜欢尝试提前定义模型中的所有字段)。
但是,真正不会迷失的最好方法是退后一步,拿起笔和纸,用任何适合你的符号草拟出系统中的主要工作流程和实体。保持简单,这样你就可以在一页或两页上可视化系统的主要功能。然后,在你实施时,这些设计可以作为你构建过程中的地图。
当然,你也可以尝试事先指定系统测试(或rspec功能规格)来定义系统应该做什么。老实说,这对我从来没有起过作用。

1
许多软件开发方法论 存在并不断演变,尽管它们的演变速度比它们实现的编程语言要慢。我建议研究敏捷宣言 并记住其原则。
我典型的Rails应用程序工作流程: 编写并实施功能(Cucumber)。 编写并实施规范(RSpec)。 编写基准测试并进行重构。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接