我经历过的几次重构

最近准备推动团队产品进行代码重构,过程中遇到一些问题与困难,由此也回想起早年经历过的一些重构,其中有些并非我主导,在此简单记录,主要谈其中印象深刻的体会,不展开。

第一次重构

我刚参加工作不久,进入了一个刚刚重组成立的项目组,我们接手时前面的人都已经离职了,一个不剩,就是这么任性,当时的代码是用 C++ 写的,而且比较混乱,难以维护,当时的老大决定用 C# 将项目重写, 于是带领我们进行了我职业生涯的第一次重构。重构的目的主要是希望优化设计,减小维护成本。印象深刻的是在重构之前,老大让我跟他一起画了一个看起来巨牛逼的重构设计图,其中引入了各种不明觉厉的设计模式,今天回想起来只能用过度设计来形容了,实际上最后非但没有减小维护成本,反而因为引入了一些复杂的设计模式,导致代码层次深性能差,难以理解。随着最初主导设计人员的离职,框架开始崩坏,后续越来越难以维护,到最后不得不面临再次被重构。

第二次重构

这次的重构由公司里一位非常优秀的工程师来主导,也正是他直接指出之前过度设计的问题,提出了一套更加简单清晰的设计方案,设计本身是业内经典架构,并没有太大问题,最后也是顺利完成,但重构后的代码并没有坚持太久,又开始逐渐腐化,根本原因还是在于各种程序员的代码水平参差不齐,项目里太多低质量的代码,又没有code review 来保障质量。我的感受是光靠架构设计本身,并不能解决所有问题,代码腐化是发生在产品演进迭代过程中的,好的架构不是银弹,只关注宏观结构不注重细节质量必然也是不行的。

第三次重构

这次我们面临了新的复杂业务的需要,同时也引入了一位新的、比较纯粹的架构师,意思是基本只负责架构设计与架构实现,在实际重构过程中,还是发现了一些问题:架构师有自己的架构理想,希望将自己多年的架构经验付诸到具体的业务里,验证自己的想法,因此这次又产生了过度设计的老问题,而且比之前还要严重,每当问及他这里为何要如此复杂设计?理由都是将来这里可能会怎样变化云云,咋一看挺有道理,而实际上很多担心过的变化直到我与他都离开也从未发生过;除却过度设计,他当时的一些设计观点现在看来也有些陈旧过时,应该跟他之前的从业经历有关,每个人都可能受自身背景的局限,唯有不断学习与了解各种业内新知识,与大家多交流,才能突破自身技术视野的狭窄。

第四次重构

这次是我自己主导,主要是针对新业务的扩展需要,对现有代码进行调整,其实并没有大的架构调整,除了对代码的整体结构整理,都是一些局部代码的调整,以满足业务的扩展需要,同时对以前的一些痛点针对性调整,完成后确实也达到了部分目标,但仍然遗留了很多问题没有解决。这次的主要收获是,重构前要有明确的要解决的目标,针对目标设计方案,不要为了重构而重构,追求完美心态的重构。当然也有一些教训,重新认识到自己能力有限,看了很多这方面的书,还是没能做好,低估了其中的困难,也没能从整体上进行规划,代码已经过于庞大,也是畏惧大改,深怕陷进去,一些陈旧的不好的代码模版仍然被保留,甚至还引入了一些新的坑。

在迭代中重构

以上是我职业生涯经历过的一些印象深刻的大规模重构,越到后面,越发明白等到技术债务欠到一定程度,需要进行完全推翻重来的重构,是一件多么困难的事情,除非有足够的资源与支持,否则风险极高,也未必能做好,因此个人的建议是重构必须随时进行,在每个迭代中进行,在很多重构相关的书里都提到过这点,但真正能做到的人不多,每次我们要开发新功能,一旦涉及到代码里的技术债务,就尽量设法一并处理掉,这样你不仅做完了新功能,同时也还清了一个技术债务,是我认为比较理想的重构方式,当然这需要我们在开发时为此预留足够的时间,最终能否可行,取决于团队以怎样的态度看待技术债务,在技术改进与业务推进之间做出权衡。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容