zoukankan      html  css  js  c++  java
  • 小步快跑是这样玩的(下)

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

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

     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==1) return "Happy new year! ";
    53         if(month==1 && day==14) return "Happy valentine's day! ";
    54         if(month==3 && day==8) return "Happy women's day! ";
    55         if(month==5 && day==1) return "Happy Labor day! ";
    56         ......
    57         
    58         if(hour>=6 && hour<12) return "Good morning!";
    59         if(hour==12) return "Good noon! ";
    60         if(hour>=12 && hour<19) return "Good afternoon! ";
    61         if(hour>=19 && hour<22) return "Good evening! ";
    62         return "Good night! ";
    63     }
    64 }

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

     

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

    相关文档:

    遗留系统:IT攻城狮永远的痛
    需求变更是罪恶之源吗?
    系统重构是个什么玩意儿
    我们应当改变我们的设计习惯
    小步快跑是这样玩的(上)
    小步快跑是这样玩的(下)
    代码复用应该这样做(1)
    代码复用应该这样做(2)
    代码复用应该这样做(3)
    做好代码复用不简单(1)

    特别说明:希望网友们在转载本文时,应当注明作者或出处,以示对作者的尊重,谢谢!

  • 相关阅读:
    javaee后台适合用的编辑器插件
    昨天做了一个使用javamail发送文件的demo
    jsp页面可以巧用模态框
    jQuery 表单验证插件——Validation(基础)
    jsp引入struts标签,引入自己写的jquery需要注意的问题
    LeetCode的神坑
    Java函数结束时的内存回收坑
    递归与回溯1
    由树的定义和递归想到的
    复杂一点的二叉树递归
  • 原文地址:https://www.cnblogs.com/mooodo/p/smallDesignIsLikeThis2.html
Copyright © 2011-2022 走看看