系统重构到这一步,我们来看看用户关于时间问候语部分的变更需求:问候需要更加精细,如中午问候“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)

做好代码复用不简单

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

小步快跑是这样玩的(下)相关推荐

  1. 小步快跑是这样玩的(上)

    软件的发展规律就是这样的,起初十分简单明了,使我们可以轻松地进行合理的设计.接着开始变更,业务变得越来越复杂,程序也随之变得越来越复杂了.正是因为软件开始由简单软件向复杂软件转变,而我们的设计却没有合 ...

  2. 大话重构连载11:小步快跑是这样玩的

    说了那么多,相信你对小步快跑的概念有了一个初步的印象,但理解还不是很深.让我们来看一看一个实际工作中的例子,来亲身感受一下什么是大布局,什么是大设计,什么是小设计. 还是回到前面那个Hello Wor ...

  3. 创业者如何小步快跑,从0开始实现自己的产品?

    2019独角兽企业重金招聘Python工程师标准>>> 某周末和学员聊完,兴起,在在行上的分类里面找自己.可是在产品里面,找来找去,完全不见踪影,反而在研发和运营里面找到了我的话题, ...

  4. log4net直切ElasticSearch,小步快跑首选

    很多小步快跑的公司,开发人员可能就3-4个,面对巨大业务压力,日连夜的赶着上线,快速试错,自然就没时间搭建一些基础设施,比如说logCenter,但初期项目不稳定,bug又多,每次都跑到生产去找日志, ...

  5. 弘辽科技:淘宝悄悄公布新规,在电商赛道小步快跑。

    疫情又来了,全国人民的生活节奏再次慢了下来.线下生活越慢,对线上服务的要求就越高,尤其是电商. 今年刚开始,淘宝在不动声色中推出了不少新规则.先是年初灰度测试了"未发货秒退款",对 ...

  6. 小步快跑,快速迭代:安全运营的器术法道

    作者 | 腾讯安全平台部 lake2 在进行安全体系建设工作的时候,人们往往容易看到的成果是新研发了一个安全系统,采用了一个新的技术,似乎做出一个系统采用一种技术就可以一劳永逸地解决某类问题了.可现实 ...

  7. 智能手机的终场战事:小步快跑进入“智慧时代”

    撰文 / 张贺飞 编辑 / 沈洁 2022年的春季发布会,照旧是一番热闹景象. OPPO.荣耀.华为.三星等品牌陆续推出新品,经历过2021年的"小阳春"后,几乎所有的主流厂商都在 ...

  8. 基于JSoup库的java爬虫开发学习——小步快跑

    因某需求,需要使用java从网页上爬取一些数据来使用,花了点时间看了一下JSoup,简单介绍一下 jsoup is a Java library for working with real-world ...

  9. 干货|软件开发,小步真能快跑吗?

    点击上方"中兴开发者社区",关注我们 每天读一篇一线开发者原创好文 作者简介 作者乐攀是非常优秀的程序员,有10多年的程序设计和开发经验,近年来致力于敏捷软件开发管理和技术实践的落 ...

最新文章

  1. 【实操】配置Telnet与SSH
  2. redis-数据类型-string类型
  3. 极致业务基础开发平台
  4. Realme真我X7系列首发骁龙860? 副总裁辟谣:大家散了吧
  5. azure云数据库_将Azure SQL数据库警报集成到Slack
  6. kindeditor 编辑器手机访问默认为HTML编辑
  7. winhex数据恢复linux,winhex数据恢复教程(非常巨大,内容丰富)
  8. 套件端口 群晖_群晖NAS的各种端口
  9. msvcr100.dll解决方法
  10. 套利进阶——简单易行的分级基金套利
  11. 如何使用国内代理ip?
  12. RJS参考之JavaScriptCollectionProxy
  13. 我的平安健康生活---师旭平
  14. SpringMVC基础--spring MVC配置详解
  15. 一文带你了解SOA接口测试
  16. Camtasia 2020 20.0.0 简体中文版 — 屏幕录像软件
  17. JZ2440挂载nfs
  18. 王道考研操作系统个人笔记--第一章计算机系统概述
  19. (javascript)vue项目打包后,写的覆盖element的样式无效了。这是什么原因?
  20. 揭秘红海云逆势增长的创新密码

热门文章

  1. 华硕FL5900U笔记本电脑重装win10专业版详细操作教程
  2. 微信吸粉技巧:微信群怎么玩?
  3. 数据中心电气设计怎么做?丨规范、负荷计算、设备选型、微模块/液冷机房…...
  4. 在win桌面上添加系统图标
  5. Python语法必备篇——Python字符串 学习【文末送书】
  6. aar打包依赖 android_打包依赖.aar文件以及坑总结
  7. 京东物流一体化供应链建设实践
  8. 推荐几个英语学习网站
  9. bw_mem 内存_TCP:内存不足—考虑调整tcp_mem
  10. 对称加密和非对称加密,数字签名和证书