小步快跑是这样玩的(下)

系统重构到这一步,我们来看看用户关于时间问候语部分的变更需求:问候需要更加精细,如中午问候“Good noon! ”、傍晚问候“Good evening! ”、午夜问候“Good midnight! ”。除此之外,用户希望在一些特殊的节日,如新年问候“Happy new year! ”、情人节问候“Happy valentine’s day! ”、三八妇女节问候“Happywomen’s day! ”,等等。此时我们发现,我们对时间问候语的变更不再需要修改HelloWorld或其它什么类,而是仅仅专注于修改GreetingAboutTime就可以了,这就是因重构带来的改善。

同时,我们发现,过去只需getHour()就足够,而现在却需要getMonth()getDay()。随着程序复杂度的提升,我们适时进行了一次重构,将与时间相关的程序抽取到一个新类DateUtil中,就可以顺利地改写原有的时间问候语程序:

/**
 * The utility of time
 * @author fangang
 */
public classDateUtil {
         private Calendar calendar;
         /**
          * @param date
          */
         public DateUtil(Date date){
                  calendar =Calendar.getInstance();
                  calendar.setTime(date);
         }
         /**
          * @return the hour of day
          */
         public int getHour(){
                  returncalendar.get(Calendar.HOUR_OF_DAY);
         }
         /**
          * @return the month of date
          */
         public int getMonth(){
                  returncalendar.get(Calendar.MONTH)+1;
         }
         /**
          * @return the day of month
          */
         public int getDay(){
                  returncalendar.get(Calendar.DAY_OF_MONTH);
         }
}
/**
 * The greeting about time.
 * @author fangang
 */
public classGreetingAboutTime {
         private Date date;
         public GreetingAboutTime(Date date){
                  this.date = date;
         }
         /**
          * @return the greeting about time
          */
         public String getGreeting(){
                  DateUtil dateUtil = newDateUtil(date);
                  int month =dateUtil.getMonth();
                  int day = dateUtil.getDay();
                  int hour = dateUtil.getHour();
                  if(month==1 && day==1)return "Happy new year! ";
                  if(month==1 &&day==14) return "Happy valentine‘s day! ";
                  if(month==3 && day==8)return "Happy women‘s day! ";
                  if(month==5 && day==1)return "Happy Labor day! ";
                  ......
                  if(hour>=6 &&hour<12) return "Good morning!";
                  if(hour==12) return "Goodnoon! ";
                  if(hour>=12 &&hour<19) return "Good afternoon! ";
                  if(hour>=19 &&hour<22) return "Good evening! ";
                  return "Good night!";
         }
}

最后,我们建立user表存放用户信息,创建UserDao类为GreetingToUser提供用户信息访问的服务;我们将greetingRule表存放问候语库,创建由GreetingRuleDao接口及其实现类,为GreetingAboutTime提供一个可扩展的、支持多语言的问候语库(如图所示)。所有这一切都是在现有基础上,通过小步快跑的方式一步一步演变的。

小步快跑是这样玩的(下)


小步快跑是一种逐步进化式的程序设计过程,它要求我们不要一次做太多的设计,不要想着一步到位完成开发。每次完成一个小设计,实现一个小需求,对原有系统进行一个小修改,然后立即运行、测试、验证。它是一个十分新颖的概念,也许你一时半会儿还不能完全领悟,或者欣然接受,因为它太前卫了,与我们传统的思维大相径庭。然而,没有关系,就像一部精彩的小说需要慢慢揭开它神秘的面纱,你会慢慢领悟,终会接受。总之,活在当下,做现在的设计,将来的事情将来再考虑。


本文出自 “充满诗意的联盟” 博客,请务必保留此出处http://mooodo.blog.51cto.com/8479307/1355459

小步快跑是这样玩的(下)

上一篇:小步快跑是这样玩的(上)


下一篇:我与GitHub的第一次——自制音乐文件修改器