2009-10-20 51 views
13

我开始为客户提供Rails应用程序,并且正在考虑创建思维导图或直接跳至Cucumber规范。你如何规划你的Rails应用程序?

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

作为一个额外的问题,假设你也从Cucumber开始,那么你会写单元测试吗?在满足规格之前?

+1

我认为这应该是社区wiki。 –

回答

4

我不认为只写规格黄瓜功能是一个好主意。编写测试代码而不能测试它会导致测试中的错误,并增加稍后需要纠正的时间。

所以我想做到以下几点:

  • 写一些心智图。但要保证项目的主要想法很简单。
  • 在sime时间开始写测试和编码(写一个测试,使其通过,写另一个测试,...)。

所以,你会写你的规格,而驾驶你的应用程序。保持清洁,但也保持敏捷,并能够在项目中间改变一些想法。

+0

明确定义域是反敏捷的吗? – Alexandre

+1

不需要。只要您允许自己在项目演变之前更改您之前定义的内容,您就保持敏捷。 –

+0

我正在考虑尽早编写这些功能,以便能够确定哪些模型方法是需要的,然后编写单元测试,然后返回到让功能通过。 – Alexandre

5

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

+0

嗨John, 您不能通过仔细映射域来识别RESTful资源吗? – Alexandre

+0

你可以这样做,但从UI开始,首先帮助我确定域边界的位置。见http://gettingreal.37signals.com/ch06_From_Idea_to_Implementation.php –

36

我有6个步骤的过程。

  1. 我喜欢的工作了模型的关系,做任何事情之前使用。通常我会尝试将模型定义为包含连贯信息块的单元。通常这通过识别我的应用程序将需要的正交资源(用户,帖子等)开始。然后我找出这些资源中每一种绝对需要的信息(属性),并可能需要(关联),以及信息如何在(方法)上运行,从那里我定义了一组规则来管理资源一致性(验证)。

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

  2. 我为我的模型编写迁移和构建骨架。除非实施方法和验证的初稿,否则我通常不会写测试。在给予一些温和的想法之前,如何实施并不总是显而易见的。

  3. 接下来是测试套件。无论我用什么来写测试,只要我可以确定后端是理智的。

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

  5. 最后我创建视图。我首先勾画出基于UI的模型,这很大程度上受到模型关系和属性的影响。抽象出公共部分,然后写出观点。

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

我可能会交错步骤2和3.我发现在编写要测试的代码后编写测试非常容易。特别是因为我通常在写一个控制台时测试东西,而测试的一半是从控制台粘贴的。

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

+0

你不说你如何识别模型和控制器。 –

+1

我有点掩饰。对于这样一个模糊的问题,我觉得这个描述太深入了。我已编辑,现在包括它。当我在其中时,我为我的其他步骤添加了类似的细节,甚至添加了一个。 – EmFi

相关问题