小步快跑是这样玩的(下)
来源:互联网 发布:图片base64发邮件 java 编辑:程序博客网 时间:2024/04/24 08:46
系统重构到这一步,我们来看看用户关于时间问候语部分的变更需求:问候需要更加精细,如中午问候“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 class DateUtil {private Calendar calendar;/** * @param date */public DateUtil(Date date){calendar = Calendar.getInstance();calendar.setTime(date);}/** * @return the hour of day */public int getHour(){return calendar.get(Calendar.HOUR_OF_DAY);}/** * @return the month of date */public int getMonth(){return calendar.get(Calendar.MONTH)+1;}/** * @return the day of month */public int getDay(){return calendar.get(Calendar.DAY_OF_MONTH);}}/** * The greeting about time. * @author fangang */public class GreetingAboutTime {private Date date;public GreetingAboutTime(Date date){this.date = date;}/** * @return the greeting about time */public String getGreeting(){DateUtil dateUtil = new DateUtil(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 "Good noon! ";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提供一个可扩展的、支持多语言的问候语库(如图)。所有这一切都是在现有基础上,通过小步快跑的方式一步一步演变的。
小步快跑是一种逐步进化式的程序设计过程,它要求我们不要一次做太多的设计,不要想着一步到位完成开发。每次完成一个小设计,实现一个小需求,对原有系统进行一个小修改,然后立即运行、测试、验证。它是一个十分新颖的概念,也许你一时半会儿还不能完全领悟,或者欣然接受,因为它太前卫了,与我们传统的思维大相径庭。然而,没有关系,就像一部精彩的小说需要慢慢揭开它神秘的面纱,你会慢慢领悟,终会接受。总之,活在当下,做现在的设计,将来的事情将来再考虑。(续)
相关文章:
遗留系统:IT攻城狮永远的痛
需求变更是罪恶之源吗?
系统重构是个什么玩意儿
我们应当改变我们的设计习惯
小步快跑是这样玩的(上)
小步快跑是这样玩的(下)
代码复用应该这样做(1)
代码复用应该这样做(2)
代码复用应该这样做(3)
做好代码复用不简单
特别说明:希望网友们在转载本文时,应当注明作者或出处,以示对作者的尊重,谢谢!
- 小步快跑是这样玩的(下)
- 小步快跑是这样玩的(下)
- 小步快跑是这样玩的(上)
- 小步快跑是这样玩的(上)
- 大话重构连载11:小步快跑是这样玩的
- 大话重构连载11:小步快跑是这样玩的
- 玩网游 是这样选武器的
- 小步快跑,快速迭代,持续优化
- 《硬球——政治是这样玩的》
- 【EXCEL】EXCEL VBA UPDATE原来是这样玩的
- 原来String是这样的(下)
- 英伟达初尝移动市场甜头 黄仁勋小步快跑想称霸
- 大话重构4:大布局与小步快跑
- 大话重构连载4:大布局与小步快跑
- 教育:慢行业开始小步快跑 |WISE2017新商业大会
- 探秘腾讯新总部:互联网巨头是这样玩黑科技的
- 一个玩英雄联盟的java程序员这样忏悔!不!是发誓!
- 人类的一小步(第二章)
- 对于一些东西的思考
- #分享资料#—《UNIX TOOLBOX》
- TCP 滑动窗口协议/1比特滑动窗口协议/后退n协议/选择重传协议
- linux中vi显示中文乱码的问题
- 函数getopt(),及其参数optind
- 小步快跑是这样玩的(下)
- 开发心得(模拟电梯APP)
- java中显示弹出对话框 show messagebox 利用JOptionPane类(转)
- Use Logging Application Block 6.0
- TreeMap集合中的两种取出元素方式
- 题目1088:剩下的树
- HDFS的优点、缺点及改进策略
- services.msc
- java中的write(int n) 要小心