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

来源:互联网 发布:神仙劫仙宠进阶数据 编辑:程序博客网 时间:2024/04/26 06:21

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

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

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

Java代码  收藏代码
  1. /** 
  2.  * The utility of time 
  3.  * @author fangang 
  4.  */  
  5. public class DateUtil {  
  6.     private Calendar calendar;  
  7.     /** 
  8.      * @param date 
  9.      */  
  10.     public DateUtil(Date date){  
  11.         calendar = Calendar.getInstance();  
  12.         calendar.setTime(date);  
  13.     }  
  14.     /** 
  15.      * @return the hour of day 
  16.      */  
  17.     public int getHour(){  
  18.         return calendar.get(Calendar.HOUR_OF_DAY);  
  19.     }  
  20.     /** 
  21.      * @return the month of date 
  22.      */  
  23.     public int getMonth(){  
  24.         return calendar.get(Calendar.MONTH)+1;  
  25.     }  
  26.     /** 
  27.      * @return the day of month 
  28.      */  
  29.     public int getDay(){  
  30.         return calendar.get(Calendar.DAY_OF_MONTH);  
  31.     }  
  32. }  
  33.   
  34. /** 
  35.  * The greeting about time. 
  36.  * @author fangang 
  37.  */  
  38. public class GreetingAboutTime {  
  39.     private Date date;  
  40.     public GreetingAboutTime(Date date){  
  41.         this.date = date;  
  42.     }  
  43.     /** 
  44.      * @return the greeting about time 
  45.      */  
  46.     public String getGreeting(){  
  47.         DateUtil dateUtil = new DateUtil(date);  
  48.         int month = dateUtil.getMonth();  
  49.         int day = dateUtil.getDay();  
  50.         int hour = dateUtil.getHour();  
  51.           
  52.         if(month==1 && day==1return "Happy new year! ";  
  53.         if(month==1 && day==14return "Happy valentine's day! ";  
  54.         if(month==3 && day==8return "Happy women's day! ";  
  55.         if(month==5 && day==1return "Happy Labor day! ";  
  56.         ......  
  57.           
  58.         if(hour>=6 && hour<12return "Good morning!";  
  59.         if(hour==12return "Good noon! ";  
  60.         if(hour>=12 && hour<19return "Good afternoon! ";  
  61.         if(hour>=19 && hour<22return "Good evening! ";  
  62.         return "Good night! ";  
  63.     }  
  64. }  


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

 

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