系统重构到这一步,我们来看看用户关于时间问候语部分的变更需求:问候需要更加精细,如中午问候“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
安全运营的核心理念在于“小步快跑,快速迭代”,这意味着安全体系的建设不能只侧重于静态的、一次性的安全系统开发,而应该是一个持续的过程。这个过程中,安全运营团队需要对系统进行持续的监控、评估以及优化,以...
微信视频号系列报告之一:小步快跑,微信视频号不是短视频(2021)(25页).pdf
公司在游戏行业采用独特的研发策略,聚焦MMORPG(大型多人在线角色扮演游戏)、SLG(策略类游戏)和放置挂机类游戏三大领域,实施“小步快跑”的研发模式,通过持续迭代和优化,打造了一系列受欢迎的精品手游。...
对主梁吊装阶段的悬索桥桥塔应力进行了分析,并对索鞍顶推、索鞍自由滑移、索鞍固结这3种假想情况下的桥塔应力计算结果进行了对比,提出了塔顶主索鞍顶推的小步快跑原则,即适当增加顶推次数,减小每次顶推的顶推量...
原地摆臂小步跑有助于孩子们了解和掌握跑步中上肢和下肢动作的协调,而弓箭步压腿和手腕脚踝运动则能有效预热肌肉和关节,为快速跑作好准备,预防运动伤害。 进入基本过程,教学活动通过原地摆臂和小步跑的练习,让...
随后的热身运动,包括头部、胸部、腿部、腰部的运动及小步跑等,能有效预防运动伤害,同时帮助学生渐入佳境。接着是快速跑练习,通过小风车游戏引出,让学生在趣味中练习快速跑的技巧。然后进行小组体验活动,如拍背...
2. 50米快速跑:强调途中跑的放松自然和后蹬充分,通过专门的跑动练习(如原地摆臂、小步跑等)来强化动作,学生示例并互相评价,进行30米和50米的跑动练习,提高快速奔跑能力。 3. 弯道跑:教授弯道跑的身体姿势,...
本文是华泰证券关于电力设备与新能源行业的专题研究报告,主要聚焦于复合箔材在电池领域的应用及其产业化进程。复合箔材,特别是复合铝箔,因其优秀的安全性能在高镍三元电池系统中展现出广阔的应用前景。...
* 原地小步跑 * 原地高抬腿 * 扶墙蹬地练习 3. 游戏:迎面接力赛跑 * 分四组进行练习 * 注意强调动作要领 教学要点 * 重点:前脚掌着地,前后摆臂 * 难点:身体平稳跑成直线 * 教师语言要清晰 * 带领学生一起...
小步跑、高抬膝跑和送髋伸小腿的练习,都是帮助学生找到适合自己步幅步频比例的有效方式。同时,这些练习还能增强学生的速度、灵敏性和力量。 到了第六课次,我们将关注途中的跑步技巧。通过辅助练习和多种形式的...
在具体教学实践中,教师设计了一系列针对性的练习,如原地摆臂、小步跑、高抬腿等,以强化“蹬摆结合”的关键技术。通过游戏如“跑垒夺旗”、“勇敢者的游戏”,让学生在游戏中锻炼,增强规则意识。同时,教师还会...
进入技术学习阶段,教师会详细讲解和示范途中跑的技术,包括如何保持正确的身体姿势,如何进行有效的摆臂,以及如何进行后蹬跑、高抬腿和小步跑等辅助练习。在此过程中,教师会个别辅导,帮助学生纠正错误动作,确保...
教学组织形式多样,包括教师讲解动作要领,学生进行小步跑、接力快速跑、高抬腿跑等练习,教师实时指导纠正错误。学生以每10人为一组,共分为四组,在学校操场上进行有组织、有纪律的活动。通过接力跑和高抬腿跑的...
2. **持续改进与小步快跑**:华为提倡员工要不断改进工作方法和操作技巧,通过持之以恒的努力,实现每天进步一点点,最终达到质的飞跃。这种“小步快跑”的策略鼓励员工在实践中学习和进步,通过反复尝试和调整,...