系统重构到这一步,我们来看看用户关于时间问候语部分的变更需求:问候需要更加精细,如中午问候“Good noon! ”、傍晚问候“Good evening! ”、午夜问候“Good midnight! ”。除此之外,用户希望在一些特殊的节日,如新年问候“Happy new year! ”、情人节问候“Happy valentine’s day! ”、三八妇女节问候“Happy women’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)
做好代码复用不简单(1)
特别说明:希望网友们在转载本文时,应当注明作者或出处,以示对作者的尊重,谢谢!
- 大小: 62.8 KB
分享到:
相关推荐
20210123-东方证券-传媒行业微信视频号系列报告之一:小步快跑,微信视频号不是短视频.pdf
微信视频号系列报告之一:小步快跑,微信视频号不是短视频.pdf
小步快跑,快速迭代:安全运营的器术法道 安全研究 安全对抗 安全分析 物联网安全法律法规
ERP项目实施经历 虹信信息化的“小步快跑” 管理资料.doc
吉比特-603444-公司深度报告:小步快跑,高质量成长验证价值.pdf
房地产企业汇报成果ppt参考-217.《小步快跑——实现项目又快又好开发》.zip
微信视频号系列报告之一:小步快跑,微信视频号不是短视频(2021)(25页).pdf
华泰证券-电力设备与新能源行业专题研究,复合箔之二:小步快跑夯实量产之基-230525.pdf
对主梁吊装阶段的悬索桥桥塔应力进行了分析,并对索鞍顶推、索鞍自由滑移、索鞍固结这3种假想情况下的桥塔应力计算结果进行了对比,提出了塔顶主索鞍顶推的小步快跑原则,即适当增加顶推次数,减小每次顶推的顶推量...
脑海中必须时刻牢记“小步快跑,快速试错”的理念,业务说啥,就是啥,业务要怎么做,你就怎么做。另外,研发资源的投入基本和业务对等,业务需求多,人数增加,业务需求少,人数相应减少,而且团队组织也基本按功能...
时代的脚步越来越快,面对从互联网时代到人工智能时代的过渡、...营销或是运营切入,不论是小步快跑还是大步向前,数据猿将持续致力于以数据应用的视角关注报道全行业,伴 随企业共同成长,成为企业商业增长的加速器。
先打个招呼,我要介绍一个老朋友,熊节。 介绍他的重要原因是,...当年我们开发一款安卓APP,用测试驱动开发的方式,不需要真机、不需要模拟器,在 JVM 上直接跑,180秒跑完 2000+个测试用例,平均每0.09秒跑一个,我
文本为研发组织效能改进体系,以用户价值为核心,敏捷迭代,小步快跑,建立持续交付,用户反馈,功能业务闭环。 以业务为导向的跨职能合作,一段时间内享有固定的人员配置。职能主管统筹管理,与各业务负责人形成AB...
本教程详细论述了敏捷开发是以用户的需求为核心,通过不断迭代、小步快跑、循序渐进的方法进行软件产品的研发,在迭代研发过程中的产品都需要经过测试,具备可视化、可集成和可运行使用的特征
从QQ到微信,从《英雄联盟》到《王者荣耀》,腾讯公司凭借强大的产品力成为世界互联网企业中的佼佼者,其“小步快跑,试错迭代”的产品开发机制,“别让我思考”的极简主义理念,“变成白痴级用户”的用户驱动战略,...
在第 25 节、第 26 节中,我们讲了如何对一个性能计数器框架进行分析、设计与实现,并且实践了之前学过的一些设计原则和设计思想。当时我们提到,小步快跑、逐步迭
4、迭代思维:对创新流程的理解,互联网的变化太快,没有太多时间来让人做计划、做调查,所以我们可以实时的关注消费者需求,根据消费者需求的变化进行微创新,小步快跑,快速迭代(试错)。 5、流量思维:对业务...
这份资料不仅适用于寻求全面转型的企业,也适合那些希望通过数字化小步快跑逐步改进业务的组织。它提供了一种结构化的方法来识别关键的业务领域,这些领域可以通过数字技术得到改善,并阐述了如何制定一个切实可行的...