博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
大话重构连载9:大布局你伤不起
阅读量:5157 次
发布时间:2019-06-13

本文共 1867 字,大约阅读时间需要 6 分钟。

作为优秀开发者,重构应当成为一种习惯,自然而然地运用重构的开发模式,自然而然地在优化和调整我们的代码。它首先要求我们掌握重构的开发模式。就是“小步快跑”的开发模式。运用“两顶帽子”的设计顺序,去开发我们的程序。

但作为重构刚開始学习的人来说,这并不easy,即使你已经从业非常多年。

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

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

一个已经维护了非常多年的大型软件项目,典型的遗留系统。

经过多年的维护。代码已经凌乱不堪,开发者已经换了非常多茬,维护工作变得越来越困难。这时,甲乙两方经过细致的沟通达成了一致。就是要对其进行一次大规模的改造。

毫无疑问。改造工作总是从会议開始的。

经过很多轮会议,起初是跟客户谈。然后是闭门会议。项目经理、资深开发者、系统架构师坐在一起。探讨的就一个事儿,系统改造的行动方案。这时。一位颇有经验的系统架构师说话了:“系统改造嘛我曾经做过。我们首先应当对现有系统进行梳理,梳理它的业务功能。维护了那么多年,业务需求文档肯定不齐全。

功能业务都没有梳理清楚。怎么改造呀?”说得还挺中肯。

“功能梳理清楚了,就開始梳理系统架构:怎么分层,怎么制定接口。这是一个很仔细的工作,分层一定要合理,要重复论证。

然后,全部的接口都是梳理之后设计出来的,要形成设计文档。

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

听了系统架构师的发言。大家一致认为可行。再一想到他之前做过,有经验,项目经理就这样拍板了。随后就是持续数月的分析、整理、开发、測试,几十号人干得不亦乐乎。最后到了该结尾的时候了,和谐社会嘛应当是一个相当和谐的结局,系统改造成功。新系统顺利上线,甲乙两方十分惬意。但很遗憾的是,这个故事却没有得到那个和谐的结局。原系统经过多年的维护。发现并攻克了很多问题,这些问题都体如今程序代码中很细节的设计,但却为之后的分析设计师们所忽略。因此在新系统上线试执行时问题此起彼伏,新系统仿佛就是数年前那个旧系统的翻版。很多在旧系统以前发现并早已修复的问题都在新系统中再次出现。

当终于系统试执行结束时,我们花费了数月的辛苦劳动打了水漂,客户再也不提这个改造后的新系统了。

听了这个故事你作何感想呢?你有过类似的经历吗?正是有了那么多系统改造慘痛的教训,才使得那么多项目经理对系统重构讳莫如深。

人总是喜欢学会遗忘,遗忘那些以前刺痛过我们心灵的经历。忘了吧,不要再去触碰那根脆弱的神经。

是的,你能够选择遗忘。但遗忘永远不可能让我们进步。勇敢者总是选择面对问题。正视问题。去分析,去总结,让错误永远不会再犯。

所以。让我们正视问题,分析分析其错误的根源。这个根源就是持续数月后才得到的反馈。

分析整个项目的过程,我们惊奇地发现,从整理需求、设计接口、着手开发、測试,最后交付,在整整数月的时间,我们都无法知道,我们做得对还是不正确。

最后的结局因此就变成了一场dubo。要么成功。要么失败,各50%的几率,这就是问题的关键。什么是成功的项目管理?就是要将失败的几率降至最低,而这里我们没有做到。

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

假如时光能够倒转,当我们又一次回到以往那个会议室又一次规划那个系统改造方案时,我们应当如何做呢?不要再去布那么大个局了。大布局你伤不起!不要去规划那个遥远而无法掌控的未来,它仅仅会让你头昏脑胀。

小设计能够让你获得成功。

大话重构连载首页:

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

转载于:https://www.cnblogs.com/wzzkaifa/p/7115032.html

你可能感兴趣的文章
网络攻防 第七周学习总结
查看>>
关于_weblogic.xml的sessionID配置
查看>>
给一次重新选择的机会_您还会选择程序员吗?
查看>>
Storm Trident示例CombinerAggregator
查看>>
MFC中lib和dll的区别
查看>>
$data[$i++]+=2;不等于$data[$i++]=$data[$i++]+2;
查看>>
面向对象——案例练习(2)求圆的周长和面积的多文件实现
查看>>
WebAPI项目 IHttpActionResult不识别解决办法
查看>>
JS按照指定的周期来调用函数方法
查看>>
java Redis读取数据方法
查看>>
安装maven
查看>>
小白学数据分析----->与MySQL有关的小知识_I
查看>>
几个ssh和sftp的命令
查看>>
CSS:position属性
查看>>
ASP.NET Web API标准的“管道式”设计
查看>>
【Spark机器学习速成宝典】模型篇03线性回归【LR】(Python版)
查看>>
<C++> 类(2):对象的种类 类之间的关系 重载操作符operator
查看>>
软工网络15个人作业5——软件工程总结
查看>>
c#字符串加载wpf控件模板代码 - 简书
查看>>
WPF 自定义滚动条(ScrollView、ScrollBar)样式
查看>>