重构的大布局

作为优秀开发人员,重构应当成为一种习惯,自然而然地运用重构的开发模式,自然而然地在优化和调整我们的代码。它首先要求我们掌握重构的开发模式,就是“小步快跑”的开发模式,运用“两顶帽子”的设计顺序,去开发我们的程序。但作为重构初学者来说,这并不容易,即使你已经从业很多年。

所谓改变一种习惯,就好像习惯了左手吃饭的人,突然被要求改成右手,你必然会感到许多的不适。首先的不适是一种心理上的障碍,即如何能迈出重构代码的第一步,这需要一种决心。初次尝试重构的开发人员总是要经历一段很长时间的纠结,纠结对既有的代码是隐忍还是重构。是的,走出重构的第一步并不容易,它对于你来说是一小步,但对于这个项目甚至这个机构来说却是一大步。

另一种不适则是来源于一种思维的定式,是小设计还是大布局。来看看我曾经经历过的一个故事吧:

一个已经维护了很多年的大型软件项目,典型的遗留系统。经过多年的维护,代码已经凌乱不堪,开发人员已经换了很多茬,维护工作变得越来越困难。这时,甲乙双方经过仔细的沟通达成了一致,就是要对其进行一次大规模的改造。

毫无疑问,改造工作总是从会议开始的。经过许多轮会议,起初是跟客户谈,然后是闭门会议,项目经理、资深开发人员、系统架构师坐在一起,探讨的就一个事儿,系统改造的行动方案。这时,一位颇有经验的系统架构师说话了:“系统改造嘛我以前做过。我们首先应当对现有系统进行梳理,梳理它的业务功能。维护了那么多年,业务需求文档肯定不齐全。功能业务都没有梳理清楚,怎么改造呀?”说得还挺中肯。

“功能梳理清楚了,就开始梳理系统架构:怎么分层,怎么制定接口。这是一个非常细致的工作,分层一定要合理,要反复论证。然后,所有的接口都是梳理之后设计出来的,要形成设计文档。”

“制定这个设计文档非常重要,没有设计文档怎么开发呀?设计错了谁来负责呀?岂不是会乱成一锅粥了。所以设计文档也应当论证,反复论证,最后才开始开发、测试、交付。整个项目搞下来怎么也得好几个月吧。”

听了系统架构师的发言,大家一致觉得可行。再一想到他之前做过,有经验,项目经理就这样拍板了。随后就是持续数月的分析、整理、开发、测试,几十号人干得不亦乐乎。最后到了该结尾的时候了,和谐社会嘛应当是一个相当和谐的结局,系统改造成功,新系统顺利上线,甲乙双方十分满意。但非常遗憾的是,这个故事却没有得到那个和谐的结局。原系统经过多年的维护,发现并解决了许多问题,这些问题都体现在程序代码中非常细节的设计,但却为之后的分析设计师们所忽略。因此在新系统上线试运行时问题此起彼伏,新系统仿佛就是数年前那个旧系统的翻版。许多在旧系统曾经发现并早已修复的问题都在新系统中再次出现。当最终系统试运行结束时,我们花费了数月的辛苦劳动打了水漂,客户再也不提这个改造后的新系统了。

听了这个故事你作何感想呢?你有过类似的经历吗?正是有了那么多系统改造惨痛的教训,才使得那么多项目经理对系统重构讳莫如深。人总是喜欢学会遗忘,遗忘那些曾经刺痛过我们心灵的经历。忘了吧,不要再去触碰那根脆弱的神经。是的,你可以选择遗忘,但遗忘永远不可能让我们进步。勇敢者总是选择面对问题,正视问题,去分析,去总结,让错误永远不会再犯。所以,让我们正视问题,分析分析其错误的根源。这个根源就是持续数月后才得到的反馈。

分析整个项目的过程,我们惊奇地发现,从整理需求、设计接口、着手开发、测试,最后交付,在整整数月的时间,我们都无法知道,我们做得对还是不对。最后的结局因此就变成了一场dubo,要么成功,要么失败,各50%的几率,这就是问题的关键。什么是成功的项目管理?就是要将失败的几率降至最低,而这里我们没有做到。

怎样才能将失败的几率降至最低呢?如果我们每工作一个月就可以知道这个月的工作对不对,则错误给我们的损失就是一个月;如果我们一周一检查,错误的损失就是一周;如果是一天,损失的就是一天;数小时,损失的就是数小时。总之,错误发现得越早,我们的损失也就越小。

假如时光可以倒转,当我们重新回到以往那个会议室重新规划那个系统改造方案时,我们应当怎样做呢?不要再去布那么大个局了,大布局你伤不起!不要去规划那个遥远而无法掌控的未来,它只会让你头昏脑胀。小设计可以让你获得成功。

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/project/

时间: 2024-08-30 15:16:04

重构的大布局的相关文章

重构连载之大布局与小步快跑

以往我们在重新设计一个系统时,总是喜欢大布局.全面地整理系统需求,全面地分析系统功能,再全面地设计系统.开发.测试.这样一个过程往往会持续数月,花费大量的工作量.但是,不到最后设计出来,谁都不知道会不会存在问题.这就是"大布局"的弊病. 正因为如此,软件大师在讲述系统重构时总是强调,系统重构应当避免大设计,而应当尽量采用一个一个连续不断的小设计.这就是我们所说的"小步快跑"的设计模式. 小步快跑体现出了敏捷软件开发的特点--简单与快速反馈.不要想得太多了,活在今天的

苏宁易购“联姻”窝窝团:“去电器化”电商大布局

苏宁易购将和窝窝团开始独家合作.昨日,苏宁易购证实,其团购频道将和窝窝团共同运营,由窝窝团提供生活服务类团单,苏宁负责提供平台销售.此前,凡客.乐蜂和优购都陆续入驻了苏宁易购,http://www.aliyun.com/zixun/aggregation/32834.html">业内人士分析,苏宁易购正在进行"去电器化"的电商大布局. 据了解,苏宁易购的团购频道9月底上线,以非实物类团购为主.苏宁易购执行副总裁李斌此前曾表示,作为苏宁易购全新业务的拓展,团购频道将采取以

腾讯已经完成了影视、文学、动漫游戏三大内容行业的大布局

摘要: 据工商备案信息,起点中文网注册公司上海玄霆娱乐信息科技有限公司已经在1月4日完成了法人变更,新法人就是腾讯文学CEO吴文辉.根据消息,目前吴文辉已从业务到人事全盘接手起 据工商备案信息,起点中文网注册公司"上海玄霆娱乐信息科技有限公司"已经在1月4日完成了法人变更,新法人就是腾讯文学CEO吴文辉.根据消息,目前吴文辉已从业务到人事全盘接手起点中文网.起点中文网的创始人回到了起点.2013年他由于盛大文学的内部动荡而离开. 微博上很多大V评论,吴文辉大仇已报. 除了起点中文之外,

CSS+DIV网页重构对比TABLE布局的显著优势

采用CSS+DIV对网站重构日趋被大家重视起来了,尤其是大型站点,就在今天下午,IT168首页改版就选择了这种做法.其实,早些时候像阿里巴巴.163等大型门户站点就已经完成了重构工作. Robin 早在去年就已经有了使用CSS+DIV来编写网页源码的习惯了,个人感觉这种方法确实比传统的TABLE形式的源码架构强多了. 采用CSS+DIV进行网页重构相对与传统的TABLE网页布局而具有以下4个显著优势: 1:表现和内容相分离 将设计部分剥离出来放在一个独立样式文件中,HTML文件中只存放文本信息.

谷歌大布局,虚拟现实大风已起

Ingress是什么?是谷歌最酷极客文化通行证,也是谷歌得力的潜在数据收集者.但当谷歌准备大举进军虚拟现实领域时,Ingresss也许正在为谷歌在下一个时代的故事埋下伏笔. 钛媒体注:Ingress是什么?是比办健身年卡还有效的瘦腿神器,也是让玩家齐聚一堂的超级粘合剂:是谷歌最酷极客文化通行证,也是谷歌得力的潜在数据收集者.但仅仅如此吗? 在谷歌一连串奇葩项目中,唯有它显得意图暧昧.就在刚刚结束的Facebook创始人扎克伯格的访华演讲中,他提到了一个Facebook未来的重要方向:虚拟现实.而

互联网巨头企业大布局 决定互联网未来10年发展

中介交易 SEO诊断 淘宝客 云主机 技术大厅 最近正在举行互联网大会,互联网中一些炙手可热的人物云集于此盛会.各家都畅所欲言,议论各个主题,我也关注了一不少,一些数据分析确实很真实,比如前几 年的电子杂志,一些企业目前基本已经不存在了,还有热受追捧的SNS,未来的路也不是很广阔,一些资本投入后基本无任何收益. 人们不会怎么去关注一些死掉的企业或是一些不看好互联网分支行业,人们都喜欢追捧一些好的信息,能让大家茶余饭后讨论的信息.电子杂志的死去也没有见过哪 个媒体去疯狂的报道,但是"狗日的腾讯&q

2014年家居电商O2O战略大布局

(本文首发在<卖家刊>网上.) 年末有媒体要我各用一个词简单归纳今年和明年的家居电商发展形势,我用了"徘徊"和"冲突"两词.2013年,家居电商整体上仍然是上不来下不去,在O2O道路上徘徊.2014年,期盼O2O模式的整体突破,线上线下的正面冲突将成为家居电商发展的主旋律. 美乐乐布局O2O线下渠道 2013年家居电商O2O模式走得最畅的无疑是美乐乐.在2012年137家线下体验店的基础上,2013年美乐乐又增加了100多家体验店,销售额近20亿,如果考

Google广告大布局爆米花网获青睐

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 Google今年试图让旗下DoubleClick平台重新在华发力,建立研发中心.推行免费策略.加强本土化运营等方式,推动其搜索广告之外的另一个战略重点:展示广告业务.此次,DoubleClick不单将在中国市场推出更具优势的产品及技术,还将缔结更多的重量级合作伙伴. 据了解,Google在视频行业重点战略合作单位就是爆米花网,在展示广告的计费

重构、标准、布局

标准 近来大家总是在标准上争论不休,其实,这些问题一些相关文章已经说得很明白了. 以下我就谈谈我的看法.本帖子有太多的"我认为",说明了我只是想把我的想法拿出来跟大家商榷,或许有太多不对的地方,也请大家一一指出. 1.我对web标准的理解 所谓的web标准,在一些教程文章上已经得到结论:结构化标准(XHTML.XML).表现标准(CSS.XSLT?).行为标准(DOM.ECMAScript).这些东西在网上一搜一大把,在这里我就不多说了.我只说我自己的想法: a.标准是相对的,有其一定