Bob Koss 与 Bob Martin展示结对编程。用TDD的开发模式做一个计算保龄球比赛得分程序。

首先,他们创建了一个测试验收用例。画了一个简单的UML图,便从写测试用例开始编程。

一开始的设计是这样的:

分为三个类:

  1. Game类
  2. Game类包含Frame类,1:10
  3. Frame类包含Throw类,1..3

然后,他们发现不需要Throw类,甚至也不需要Frame类。接着,不断的按功能增加单元测试,单元测试不通过则编写业务代码,通过后再重构,直到代码看上去没有坏味道为止。比如补中与全中的计分功能。整个开发过程是互相提出想法,用代码实践想法,提出修改意见,用代码实践修改意见。

最后代码:

Game:

 1  public class Game
 2     {
 3         int currentFrame = 0;
 4         bool isFirstThrow = true;
 5         Scorer scorer = new Scorer();
 6 
 7         public int Score { get { return ScoreForFrame(currentFrame); } }
 8 
 9         public void Add(int pins)
10         {
11             scorer.AddThrow(pins);
12             AdjustCurrentFrame(pins);
13         }
14 
15         void AdjustCurrentFrame(int pins)
16         {
17             if (LastBallInFrame(pins)) AdvanceFrame();
18             else isFirstThrow = false;
19         }
20 
21         bool LastBallInFrame(int pins)
22         {
23             return Strike(pins) || !isFirstThrow;
24         }
25 
26         bool Strike(int pins)
27         {
28             return isFirstThrow && pins == 10;
29         }
30 
31         void AdvanceFrame()
32         {
33             currentFrame++;
34             if (currentFrame > 10) currentFrame = 10;
35         }
36 
37         public int ScoreForFrame(int theFrame)
38         {
39             return scorer.ScoreForFrame(theFrame);
40         }
41     }
View Code

相关文章: