系统重构到这一步,我们来看看用户关于时间问候语部分的变更需求:问候需要更加精细,如中午问候“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. 游戏:迎面接力赛跑 * 分四组进行练习 * 注意强调动作要领 教学要点 * 重点:前脚掌着地,前后摆臂 * 难点:身体平稳跑成直线 * 教师语言要清晰 * 带领学生一起...
在具体教学实践中,教师设计了一系列针对性的练习,如原地摆臂、小步跑、高抬腿等,以强化“蹬摆结合”的关键技术。通过游戏如“跑垒夺旗”、“勇敢者的游戏”,让学生在游戏中锻炼,增强规则意识。同时,教师还会...
3. **基本过程**:教学过程中,通过原地摆臂和小步跑的练习,教导孩子们正确的跑步技巧,强调手臂的摆动在跑步中的作用。分组进行跑步练习和比赛,不仅增加了趣味性,还能激发孩子们的竞争意识,提高参与度。 4. **...
重点在于提高步频,包括小步跑、高抬膝跑和送髋伸小腿的练习,目的是找到适合自己的步幅步频比例,同时增强速度、灵敏性和力量。 **第六课次** 关注途中跑,通过跑的辅助练习和多种形式的跑,使学生能够在快速跑中...
进入技术学习阶段,教师会详细讲解和示范途中跑的技术,包括如何保持正确的身体姿势,如何进行有效的摆臂,以及如何进行后蹬跑、高抬腿和小步跑等辅助练习。在此过程中,教师会个别辅导,帮助学生纠正错误动作,确保...
教学组织形式多样,包括教师讲解动作要领,学生进行小步跑、接力快速跑、高抬腿跑等练习,教师实时指导纠正错误。学生以每10人为一组,共分为四组,在学校操场上进行有组织、有纪律的活动。通过接力跑和高抬腿跑的...
2. **持续改进与小步快跑**:华为提倡员工要不断改进工作方法和操作技巧,通过持之以恒的努力,实现每天进步一点点,最终达到质的飞跃。这种“小步快跑”的策略鼓励员工在实践中学习和进步,通过反复尝试和调整,...