小步快跑是这样玩的(下)
系统重构到这一步,我们来看看用户关于时间问候语部分的变更需求:问候需要更加精细,如中午问候“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:小步快跑是这样玩的
说了那么多,相信你对小步快跑的概念有了一个初步的印象,但理解还不是很深.让我们来看一看一个实际工作中的例子,来亲身感受一下什么是大布局,什么是大设计,什么是小设计. 还是回到前面那个Hello Wor ...
- 创业者如何小步快跑,从0开始实现自己的产品?
2019独角兽企业重金招聘Python工程师标准>>> 某周末和学员聊完,兴起,在在行上的分类里面找自己.可是在产品里面,找来找去,完全不见踪影,反而在研发和运营里面找到了我的话题, ...
- log4net直切ElasticSearch,小步快跑首选
很多小步快跑的公司,开发人员可能就3-4个,面对巨大业务压力,日连夜的赶着上线,快速试错,自然就没时间搭建一些基础设施,比如说logCenter,但初期项目不稳定,bug又多,每次都跑到生产去找日志, ...
- 弘辽科技:淘宝悄悄公布新规,在电商赛道小步快跑。
疫情又来了,全国人民的生活节奏再次慢了下来.线下生活越慢,对线上服务的要求就越高,尤其是电商. 今年刚开始,淘宝在不动声色中推出了不少新规则.先是年初灰度测试了"未发货秒退款",对 ...
- 小步快跑,快速迭代:安全运营的器术法道
作者 | 腾讯安全平台部 lake2 在进行安全体系建设工作的时候,人们往往容易看到的成果是新研发了一个安全系统,采用了一个新的技术,似乎做出一个系统采用一种技术就可以一劳永逸地解决某类问题了.可现实 ...
- 智能手机的终场战事:小步快跑进入“智慧时代”
撰文 / 张贺飞 编辑 / 沈洁 2022年的春季发布会,照旧是一番热闹景象. OPPO.荣耀.华为.三星等品牌陆续推出新品,经历过2021年的"小阳春"后,几乎所有的主流厂商都在 ...
- 基于JSoup库的java爬虫开发学习——小步快跑
因某需求,需要使用java从网页上爬取一些数据来使用,花了点时间看了一下JSoup,简单介绍一下 jsoup is a Java library for working with real-world ...
- 干货|软件开发,小步真能快跑吗?
点击上方"中兴开发者社区",关注我们 每天读一篇一线开发者原创好文 作者简介 作者乐攀是非常优秀的程序员,有10多年的程序设计和开发经验,近年来致力于敏捷软件开发管理和技术实践的落 ...
最新文章
- 【实操】配置Telnet与SSH
- redis-数据类型-string类型
- 极致业务基础开发平台
- Realme真我X7系列首发骁龙860? 副总裁辟谣:大家散了吧
- azure云数据库_将Azure SQL数据库警报集成到Slack
- kindeditor 编辑器手机访问默认为HTML编辑
- winhex数据恢复linux,winhex数据恢复教程(非常巨大,内容丰富)
- 套件端口 群晖_群晖NAS的各种端口
- msvcr100.dll解决方法
- 套利进阶——简单易行的分级基金套利
- 如何使用国内代理ip?
- RJS参考之JavaScriptCollectionProxy
- 我的平安健康生活---师旭平
- SpringMVC基础--spring MVC配置详解
- 一文带你了解SOA接口测试
- Camtasia 2020 20.0.0 简体中文版 — 屏幕录像软件
- JZ2440挂载nfs
- 王道考研操作系统个人笔记--第一章计算机系统概述
- (javascript)vue项目打包后,写的覆盖element的样式无效了。这是什么原因?
- 揭秘红海云逆势增长的创新密码