当您开始处理现有的Rails项目时,您采取了哪些步骤来理解代码?你从哪里开始的?在深入了解控制器,模型,帮助器和视图之前,您使用什么来获得高级视图?您是否有任何特定的技巧,技巧或工具可以帮助加快这一过程?
请不要回答“学习Rails和Ruby”(就像其中一个回复一样) 最后一个人 谁问这个问题 - 他也没有对他的问题做出太多回应,所以我想我会再问一次并提示一点。我对自己的代码很满意。它正在排序其他人,这让我很开心。
当您开始处理现有的Rails项目时,您采取了哪些步骤来理解代码?你从哪里开始的?在深入了解控制器,模型,帮助器和视图之前,您使用什么来获得高级视图?您是否有任何特定的技巧,技巧或工具可以帮助加快这一过程?
请不要回答“学习Rails和Ruby”(就像其中一个回复一样) 最后一个人 谁问这个问题 - 他也没有对他的问题做出太多回应,所以我想我会再问一次并提示一点。我对自己的代码很满意。它正在排序其他人,这让我很开心。
看看模特。如果应用程序写得很好,这应该会给你一个域模型的图片,这是有趣的逻辑应该存在的地方。我还看一下模型的测试。
控制器/视图的实现方式 应该 只需使用Rails应用程序并观察URL即可。
不幸的是,在很多情况下,控制器甚至视图中都存在过多的逻辑。这意味着您还必须查看这些目录。双重不幸的是,对这些层的测试往往不太清楚。
首先我使用应用程序,注意有趣的控制器和动作名称。
然后我开始阅读这些控制器的代码,并在必要时阅读相关的模型。观点通常不太重要。
我想说看一下测试(或规范,如果项目使用RSpec)来了解应用程序应该做的高级别的想法。一旦您从顶层了解模型/视图/控制器的行为方式,您就可以深入了解这些实现。
如果Rails项目处于一个稍微稳定的状态,那么我一直很喜欢使用调试器来帮助导航代码库。我将启动浏览器并开始与应用程序交互,然后定位一些功能并在相关功能的开头设置断点。有了这个,我只研究进入函数的参数和返回的值,以便更好地了解正在发生的事情。一旦感到舒服,您可以稍微修改一下功能,以确保您了解正在发生的事情。只是对代码执行一些静态分析可能很麻烦!祝你好运!
我可以想到两个原因来看待我以前没有参与的现有应用程序:我需要进行更改或者我想了解一个或多个方面,因为我正在考虑将它们用作变更的输入我是考虑到另一个应用程序。我在第二个案例中包括了阅读教育/启蒙。
特别是MVC模式的真正好处,以及许多Web应用程序通常是相当容易分成请求/响应对,这在某种程度上可以孤立地理解。因此,您可以从单一的互动开始,并从中增加您的理解。
当需要修改或扩展现有代码时,我应该知道第一个更改将是什么 - 如果不是,那么我可能不应该愚弄代码!在Rails应用程序中,更改最有可能涉及视图,模型或两者的组合,我应该能够相当快地识别相关项目。如果有测试,我检查它们是否运行,然后尝试编写一个公开缺失功能的测试,然后离开。如果没有测试那么它有点棘手 - 我会担心我可能会无意中破坏某些东西:我会考虑添加测试以给自己一个更大的信心,这将反过来开始建立对该领域的一些理解研究。我应该很快就能进入一个 红 - 绿 - 重构 循环,在我学习的过程中提高速度。
运行测试。 :-)
如果你很幸运,它将建立在RSpec上,并且无论实现如何都会描述行为。
与目前为止的很多人不同,我实际上并不认为测试是开始的地方。我认为它们太狭隘,太专注。这就像试图通过首先放大分子内力和量子力学来理解基本物理/力学一样。我也认为你过分依赖写得很好的测试,而且根据我的经验,很多人没有编写足够的测试或编写糟糕的测试(这些测试没有准确地了解代码实际应该做什么)。
1)我认为首先要做的是了解应用程序实际上到底做了什么。使用它,至少足够长的时间,以了解其主要目的是什么,不同类型的数据可能是什么以及您可以执行哪些操作,最重要的是, 为什么。
2)你需要退一步看大局。我认为最好的方法是从开始 schema.rb
。这告诉你一些非常重要的事情:
app/models
但这实际上会告诉你每个模型的数据。*_id
在字段中,您将学习模型之间的关联,这有助于您了解它们如何组合在一起。我会通过查看每个模型来跟进 *.rb
文件(希望)注释,验证,关联以及与每个相关的任何其他逻辑。留意可能存在的常规ol'Ruby课程 lib/
。
3)我个人稍后会瞥一眼 routes.rb
因为它会告诉你两个关键的事情:对应用程序中所有操作的简要调查,如果路由和控制器/操作得到很好的命名和思考,快速了解不同功能可能存在的位置。
此时,您可能已准备好深入了解您需要学习的具体事项。找到您最感兴趣的功能的控制器并打开它。开始阅读相关操作,查看涉及的模型,以及 现在 如果你愿意,可能会开始破解开放测试。
不要忘记使用其余的工具:Ruby / Rails调试器,浏览器开发工具,日志等。
rake test
在一个终端除了已发布的运行规范的提示和分解MVC之外,我还喜欢:
rake routes
另一种获取进入应用程序的所有路径的高级视图的方法
./script/console
rails irb console仍然是我最喜欢的检查模型和模型方法的方法。抓住一些记录并在irb中使用它们。我知道它在开发和测试过程中对我很有帮助。