大话重构连载9:大布局你伤不起

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

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

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

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

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

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

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

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

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

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

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

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

大话重构连载首页:http://blog.csdn.net/mooodo/article/details/32083021

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

大话重构连载9:大布局你伤不起

时间: 2024-08-07 08:40:14

大话重构连载9:大布局你伤不起的相关文章

大话重构4:大布局与小步快跑

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

大话重构连载10:小设计而不是大布局

开车的朋友一定深有体会,驾驶汽车其实就是在不断矫正汽车行驶方向的一个过程.在整个驾驶过程中,你必须全神贯注地紧盯前方,通过方向盘不断矫正方向,否则即使行驶在直线路段也可能偏离车道.那些疲劳驾驶的司机,因为进入睡眠状态,无法再矫正方向,车辆就会越来越偏离航向.这种情况下,即使数秒钟的小盹,也能造成车毁人亡的严重后果. 重构与驾车虽然属于完全不同的领域,但其道理是相同的.我们在运用重构方法修改代码的过程中也是经常会犯错的(是人就会犯错).犯错就如同偏离了航向一样,因此我们需要不断去矫正.既然是矫正,

大话重构连载4:大布局与小步快跑

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

大话重构连载16:超级大函数

事情总是这样的:当我们对一个遗留系统一忍再忍,再忍,忍,还要忍--终于积攒到某一天,实在忍无可忍了,拍案而起,不能再忍了,重构!!!事情就这样发生了.然而,在这时你突然发现,重构的工作千头万绪,真不知从何开始.堆积如山的问题此起彼伏,期望修改的设计思绪万千.这里有个想法,那里有个思路,什么都想做,却什么都做不了,真是脑子里一团乱麻.这时候,没有一个合理的步骤,清晰的计划,瞎干蛮干是十分危险的,它会为你的重构带来不可预期的未来.无数次的经验告诉我,不论是什么系统,采用什么架构,从分解大函数开始,肯

大话重构连载19:大对象的演化过程

很好,我们终于迈出了重构的第一步,而这第一步我们瞄准了代码问题的重灾区——超级大函数.超级大函数之所以是代码问题的重灾区,就是因为它们往往难于阅读.难于维护.面对大函数我们采取的办法是拆分,以功能为核心将其拆分成一个一个独立的函数.拆分后的程序变得易于阅读了,因为要读懂程序你不再需要读完所有代码,选择性的读取那些顶级函数,只需了了数行代码,你就可以明白整个程序. 但是,当我们将数千行的大函数分解成数十个小函数时,另一个问题出现了.想象一下,数十个函数被杂乱无章地堆放在一个对象中,看看就让人头疼.

大话重构连载首页

<大话重构>这本书是我写的第一本书,从今天起我将通过连载的形式逐渐跟大家分享. 这本书让你: 告别游击队转变为正规军. 远离劣质代码走向精妙设计 真正明确专业级的软件开发是如何的 真正明确重构是如何一步一步进行的 高效重构七步曲.面对实践不卡壳 让遗留系统维护不再是你的梦魇 读完这本书以后: 需求变更不再纠结.重构让你润物细无声地容纳它们 超越代码级的重构,从各个层面深度领略重构之美 自己主动化測试不再是梦想.重构让自己主动化測试走你 又一次审视熟悉而陌生的技术.将碎了一地的它们又一次铆合在一

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

说了那么多.相信你对小步快跑的概念有了一个初步的印象,但理解还不是非常深.让我们来看一看一个实际工作中的样例,来亲身感受一下什么是大布局,什么是大设计.什么是小设计. 还是回到前面那个HelloWorld的样例,起初的需求总是简单而清晰的. 当用户登录一个站点时,站点往往须要给用户打一个招呼:"hi, XXX! ".同一时候,假设此时是上午则显示"Good morning! ",假设是下午则显示"Good afternoon! ",除此显示&qu

大话重构连载12:你不能没有保险索

通过前面的描述你已经对重构中"小步快跑"的开发模式有了一个清楚的认识.学会和习惯小步快跑的开发模式,对于重构工作极其重要,因为它让这种大范围.大幅度修改代码的重构工作变得不再像以往那样让人胆战心惊.究其原因,虽然从结果上是在大范围.大幅度调整,但每一步却是小范围.小福度调整,并且能保证每一步都是正确的. 然而,这里有一个非常重要的假设条件,那就是"保证每一步都是正确的",这是怎么保证的呢?就这个问题,我们需要展开来认真讨论讨论. 毫无疑问,系统重构就其结果来看,是在

大话重构连载2:什么是系统重构

当我们开始系统重构的时候,不是着手去修改代码,而是首先建立测试机制.不论什么程序,只要是被我们修改了,理论上就可能引入BUG,因此我们就必须要进行测试.既然是测试就必须要有一个正确与否的评判标准.以往的测试,其评判的标准就是是否满足业务需求.因此,测试人员往往总是拿着需求文档测试系统. 与以往的代码修改不同,重构没有引入任何新的需求,系统原来什么功能,重构以后还是这些功能.因此,重构的测试标准就只有一个,就是与之前的功能完全保持一致,仅此而已. 然而在许多经典的重构书籍中,大师们总是建议我们首先