2009年5月24日星期日

改进实现

TimeMachine的第一个实现跑起来了,跟预期的行为一样。但进一步想想,有两点不足:
  1. 每睡一小时/一分钟都会输出一条日志,一个周末下来,输出了很多重复的日志。
  2. 端午节要到了,原来的实现只考虑了周末,没有考虑这种节假日休息,周日反而要工作的情况。
解决起来也很简单:
  1. 在WorkTimeControllerImpl中添加一个方法“Date nextStartTime()”,计算下一次开始工作的时间,这样waitTillStartTime()就可以只输出一条日志,然后一直睡到下次开始工作。
  2. 在WorkTimeControllerImpl中添加一个非工作日列表,包括正常周末和节假日。
这个故事有两点意义:
  1. 重复的无用信息是不好的。Don't Repeat Yourself. 无用的信息会干扰有用的信息。
  2. WorkTimeController和TimeMachine接口都不需要改变,这就是区分“做什么”和“怎么做”的好处。
一次就做对是不容易的事。就像书法家写作品,写了很多,满意的不多。

没有评论: