14

我正在为客户启动 Rails 应用程序,并且正在考虑创建思维导图或直接跳转到 Cucumber 规范。

你如何规划你的 Rails 应用程序?

作为一个附加问题,假设您也是从 Cucumber 开始的,那么您会在什么时候编写单元测试?在满足规格之前?

4

3 回答 3

37

我有一个 6 步的过程。

  1. 我更喜欢在做任何事情之前弄清楚模型关系和用途。通常,我尝试将模型定义为包含连贯信息块的单元。通常这首先要确定我的应用程序需要的正交资源(用户、帖子等)。然后,我找出每个资源绝对需要(属性)和可能需要(关联)的信息,以及如何操作这些信息(方法),从那里我定义了一组规则来管理资源一致性(验证)。

    我通常会重复我的设计几次,因为定义其他模型的行为通常会让我重新思考我已经完成的模型。一旦我有了我喜欢的模型设计,我将开始重构或专门化(子类化)模型以阐明设计。

  2. 我编写迁移并为我的模型制作骨架。在实现方法和验证的初稿之前,我通常不会编写测试。在给它一些适度的想法之前,如何实现事情并不总是显而易见的。

  3. 接下来是测试套件。不管我以前写什么测试,只要我能确定后端是健全的。

  4. 这是我拼凑控制流的时候。成功的请求会发生什么?请求失败?哪些控制器操作将链接到其他控制器?通常控制器和模型之间存在 1-1 映射(不包括模型的子类),我经常会遇到需要对多种模型类型进行操作的情况,为此我可能会创建一个新控制器。根据我的应用程序的复杂程度,我可以将流程建模为状态机。

  5. 最后我创建视图。我首先勾勒出深受模型关系和属性影响的 UI。抽象出公共部分,然后编写视图。

  6. 抛光用户界面。我创建了一个 CSS,并开始用远程调用替换链接,或者在适当的时候甚至只是 javascript。

我可以将第 2 步和第 3 步交错。我发现在编写要测试的代码之后编写测试非常容易。特别是因为我通常在编写时在控制台中测试东西,而一半的测试是通过从控制台粘贴来编写的。

我还可以为每个模型/控制器划分步骤 4 和 5。我可以回去修改任何一点,以前的决定,并通过我的步骤传播这些变化。

于 2009-10-20T15:29:17.767 回答
5

我从用户界面的草图开始,然后进入 HTML 模型。一旦 UI 设计完成,我就可以识别应用程序中的 RESTful 资源及其关系。

于 2009-10-20T12:43:10.493 回答
4

我不认为只编写黄瓜特性作为规范是一个好主意。编写测试代码而无法通过测试会导致测试错误,并增加您以后需要更正它们的时间。

所以我会做以下事情:

  • 写一些思维导图。但要保持项目的主要想法简单。
  • 同时开始编写测试和编码(编写一个测试,使其通过,编写另一个,......)。

因此,您将在驱动应用程序时编写规范。保持清洁,同时保持敏捷,并能够在项目中间改变一些想法。

于 2009-10-20T11:51:27.290 回答