你如何阅读现有的Rails项目?

时间:2009-01-31 13:49:55

标签: ruby-on-rails ruby

当您开始处理现有的Rails项目时,您采取了哪些步骤来理解代码?你从哪里开始的?在深入了解控制器,模型,帮助器和视图之前,您使用什么来获得高级视图?您是否有任何特定的技巧,技巧或工具可以帮助加快这一过程?

请不要回答“学习Rails& Ruby”(就像last guy提出这个问题的回复之一 - 他也没有对他的问题做出太多回应所以我想我会问再次提示一点)。我对自己的代码很满意。它正在整理其他人,这让我很长时间不知所措。

11 个答案:

答案 0 :(得分:8)

看看模特。如果应用程序写得很好,这应该会给你一个域模型的图片,这是有趣的逻辑应该存在的地方。我还看一下模型的测试。

只需使用Rails应用程序并观察URL,就可以明白实现控制器/视图的方式

不幸的是,在很多情况下,控制器甚至视图中都存在过多的逻辑。这意味着您还必须查看这些目录。双重不幸的是,对这些层的测试往往不太清楚。

答案 1 :(得分:4)

首先我使用应用程序,注意有趣的控制器和动作名称。

然后我开始阅读这些控制器的代码,并在必要时阅读相关模型。观点通常不太重要。

答案 2 :(得分:1)

我想说看一下测试(或规范,如果项目使用RSpec)来了解应用程序应该做的高级别的想法。一旦您从顶层了解模型/视图/控制器的行为方式,您就可以深入了解实现。

答案 3 :(得分:1)

如果Rails项目处于稍微稳定的状态,那么我一直非常喜欢使用调试器来帮助导航代码库。我将启动浏览器并开始与应用程序交互,然后定位一些功能并在相关功能的开头设置断点。有了这个,我只研究进入函数的参数和返回的值,以便更好地了解正在发生的事情。一旦感到舒服,您可以稍微修改一下功能,以确保您了解正在发生的事情。只是对代码执行一些静态分析可能很麻烦!祝你好运!

答案 4 :(得分:1)

我可以想到两个原因来看待我之前没有参与的现有应用程序:我需要进行更改或者我想了解一个或多个方面,因为我正在考虑将它们用作变更的输入我正在考虑去另一个应用程序。我在第二个案例中包括了阅读教育/启蒙。

特别是MVC模式的真正好处,一般来说,许多Web应用程序很容易将它们分成请求/响应对,这在某种程度上可以被孤立地理解。因此,您可以从单一的互动开始,从中增加您的理解。

当需要修改或扩展现有代码时,我应该知道第一个更改是什么 - 如果没有那么我可能不应该愚弄代码呢!在Rails应用程序中,更改最有可能涉及视图,模型或两者的组合,我应该能够相当快地识别相关项目。如果有测试,我检查它们是否运行,然后尝试编写一个公开缺失功能的测试,然后离开。如果没有测试那么它有点棘手 - 我会担心我可能会无意中破坏某些东西:我会考虑添加测试以给自己一个更大的信心,这将反过来开始建立对该领域的一些理解研究。我应该很快就能进入red-green-refactor循环,在我学习的过程中提高速度。

答案 5 :(得分:1)

运行测试。 : - )

如果你很幸运,它将建立在RSpec之上,无论实现如何,它都会描述行为。

答案 6 :(得分:1)

与目前为止的很多人不同,我实际上并不认为测试是开始的地方。我认为它们太狭隘,太专注。这就像试图通过首先放大分子内力和量子力学来理解基本的物理/力学。我也认为你过分依赖写得很好的测试,而且根据我的经验,很多人都没有编写足够的测试或编写糟糕的测试(这些测试没有准确地了解代码实际应该做什么)。

1)我认为要做的第一件事就是了解应用程序实际上到底做了什么。使用它,至少足够长的时间,以了解其主要目的是什么,不同类型的数据可能是什么以及您可以执行哪些操作,最重要的是, 为什么

2)你需要退一步看看大局。我认为最好的方法是从schema.rb开始。这告诉你一些非常重要的事情:

  • 这个项目的词汇/概念是什么? “用户”在这款应用中的含义是什么?为什么该应用程序同时具有“用户”和“帐户”模型以及它们如何不同/相关?
  • 您可以通过查看app/models来了解有哪些模型,但这实际上会告诉您每个模型保存的数据。
  • 感谢*_id字段,您将了解模型之间的关联,这有助于您了解它们如何组合在一起。

我会通过查看每个模型的*.rb文件(希望)评论,验证,关联以及与每个模型相关的任何其他逻辑来跟进。请留意可能存在于lib/的常规ol'Ruby课程。

3)我个人稍后会简要地看一下routes.rb因为它会告诉你两个关键的事情:对应用程序中所有动作的简要调查,以及路线和控制器/行动得到很好的命名和思考,快速了解不同功能可能存在的地方。

此时您可能已准备好深入了解您需要学习的具体事项。找到您最感兴趣的功能的控制器并打开它。开始阅读相关操作,查看涉及哪些模型, now 可能会开始破解开放测试。

不要忘记使用其余的工具:Ruby / Rails调试器,浏览器开发工具,日志等。

答案 7 :(得分:0)

  1. 我在终端
  2. 中运行rake test
  3. 如果环境没有加载,我会查看堆栈跟踪以找出发生了什么,然后我修复它以便环境加载并再次运行测试
  4. 我启动服务器并在浏览器中打开应用程序。点击。
  5. 开始处理手头的任务。
  6. 如果代码摇滚,我很高兴。如果代码很糟糕,我hurt it for fun and profit

答案 8 :(得分:0)

除了已发布的运行规范和分解MVC的提示之外,我还喜欢:

rake routes

作为获取进入应用程序的所有路径的高级视图的另一种方式

./script/console

rails irb console仍然是我最喜欢的检查模型和模型方法的方法。抓住一些记录并在irb中使用它们。我知道它在开发和测试过程中对我很有帮助。

答案 9 :(得分:-1)

查看文档,有一些项目有很好的文档。 理解其他代码有点难,但试试吧......阅读代码; - )

答案 10 :(得分:-1)

请按照以下步骤操作:  1.找到“ routes.rb”文件,并一一选择路径。  2.检查关联控制器的选定路径。     一世。检查过滤器和正在过滤器中调用的方法。    ii。检查允许的参数。   iii。检查控制器响应返回或重定向到的位置。  3.用控制器方法检查使用的型号。     一世。检查模型验证,回调函数。    ii。检查关联并查找关联的模型。   iii。看一下模型中定义的范围及其用法。  4.如果使用rails UI,请检查视图的加载方式和工作方式。