我的重构感悟

在三年前我就读了《重构改善既有代码的设计》,里面写了很多有关代码重构的技巧,知易行难!我整理了一下重构给我的感悟。

NO.1是什么导致的重构?

为业务的改变而调整

这是一个最合理的原因,我们无法预料到业务的发展,我们当下制定的业务职责和边界,对于一个快速发展的项目,能应对半年的情况,已经是一件相当不容易的事情。正如我们业务发展开始的时候,能承受起几千个用户。而当有十几万用户的时候,系统承受的压力是远远的不一样的。

为自己or别人的错误埋单!

代码是由程序员创造,我们如果不好好教育代码,一旦让它成为令人抓狂的“熊孩子”,最终的恶果还是我们自己承受。我也会吐槽自己写过的代码,毕竟编程技巧是一项技艺,需要日复一日的不断磨练,需要承受自己给自己带来的坑,才会学会成长。作为一名及格的程序员不能把重构时刻挂在嘴边,正如教育孩子更多是需要言传身教,以身作则。所以我们要将重构彻底融入到每一句代码中,我们既是在不断写新的业务,也是不断在重构我们的代码。

“无奈”的架构师

很多公司招了一个牛逼的架构师,怎么可以在短时间内向公司证明自己的能力?重构无疑是一条快捷的出路。

因为公司之前的架构已经不能适应公司发展,导致了公司业务发展不顺。听说过有些创业公司,每招来一个架构师,就把之前的代码进行重构一次的事例。但是这种重构,更多的是重写,而不是重构。但这种重写,往往由于架构师对业务缺乏深度的认识和充裕的时间,带来了断崖般的崩塌,因为在重写的过程中,bug层出不穷,导致业务极其不稳定。这也是一些人对重构嗤之以鼻的情况的根源。

NO.2重构前提条件是什么?

全盘熟悉代码,掌控业务。

接手别人的项目时,在看到混乱不堪的代码后,不要一上来就开始大动干戈。先熟悉代码架构,如果一个代码架构都混乱不堪,那就多费点劲,将代码好好得梳理一遍,如果有详细地文档的话,配合文档一起阅读的效果会更好。但是现实却是,你不得不去阅读一些令你感到莫名其妙的代码,然后自己去整理文档。慢慢熟悉一个项目的业务逻辑,梳理清楚业务内部之间的关系。如果你不熟悉业务,不熟悉代码,来讲重构,无疑是重写的罢了。

时间!

在你尚没能熟练《重构》的各项技巧之前,请首先明白你当下是否有充足的时间,毕竟高效完成工作才是最重要的。在工作中,其他人更多只会关心的是程序员的产出:项目的稳定快速迭代,但是熟练技巧需要大量的练习时间。而大型的重构,则需要更加多的人力物力的投入。

NO.4重构的目标是什么?

标准化

在不断地编码过程中,遇到的重复的问题会越来越多,而各类语言框架正是将标准化的一种体现。而对遇到的重复问题进行标准化处理,除了能让我们避免重复劳动提高开发效率,及让我们将一些业务进行层次分工。在标准化的过程中,主要做的是将业务职责划分清楚,避免混乱不堪的界面。

标准化是一个很漫长的过程,收益很明显,但是正如企业的架构一样,当面临调整的时候,也会面临重大的挑战。当我们面临将已经标准化的代码架构进行重构的时候,这样的重构成本会相当的高。所以在制定标准化中需要严格按照“SOLID”的原则下进行。虽然这是有点古老的原则,但是没有这些原则指导,制定的标准化,寸步难行。

更好,更快

无论在什么情况下,在编程里面完成任务是重中之重(重要的事情要重复一下)。只有先完成,我们才能去说追求更多——让程序运行的更好,更快。要做到这个目标,必须要在时间复杂度和空间复杂度上下更多的功夫。这是《数据结构》这门课程最基础、最简单,也是贯通全书的知识点。最近在阅读《Redis设计与实现》一书的时候,更是充分地了解到这两点的重要,几乎是所有操作都是O(1)的时间复杂度,在它各种数据结构和对象的实现上,都体现了尽量少的存储空间做尽量多的事情。Do less,get more!

我们虽然谨记时间复杂度和空间复杂度,但是不能绝对强调。更好、更快不是单单指这两个基础指标,还有代码的可读性、可扩展性,还有业务之间的耦合度和业务自身的高内聚。如关系型的数据库一样,绝对的范式设计只会存在于实验室。在现实的项目中,为了提高开发效率和查询速度,我们会根据实际需要设计冗余的数据表。所以,在实际开发中我们总要适当的进行取舍,根据业务的特性和实际场景,牺牲一些时间复杂度和空间复杂度,以达到整体更高的收益。

NO.5重构带来了什么?

开发效率的极大提升

之前有一段时间,有好几个项目我需要同时开发,但是我都可以完全轻松的掌控,而且是保质保量地按时完成了开发任务。因为我在不断地重构中,整理出了一套自己的编码标准,在这套编码标准下,设计好了代码思路后,进入了编程阶段的我无需过多的进行思考,只要我按照自己制定好的道路和代码层次去简单编码即可。而在测试阶段出了一些bug,更多的是产品设计上的缺陷而需要产品完善的地方。
对于目前来说,写一个新的业务,就是在一个零零散散的积木进行快速拼凑,再为这个项目添加上它自身的特有的色彩即可。

开发思路的改变

对于我而言,我是在完善自己的代码工具库。首先如何将一些常见的代码逻辑进行不断抽象进行封装,变成自己的工具;如何将自己的工具变得更加快捷便利,当下的工具是否需要进行调整来适应业务发展;在什么业务场景下,哪些工具可以复用或者抽取形成一个微服务。

NO.6重构边界

在《重构》中说到,重构是在时刻进行着的。对于个人开发业务而言,这是正确的,因为需求触发改变。但是对于整体架构而言,我们更多的是在固定的框架下,默默耕耘。

正如在一栋楼房里面,我们可以花一天的时间对其中一个房间进行重新摆设,而对整栋楼房的影响近乎微乎其微。因为每个人有自己的风格,对房间按照自己的心意进行重构,无可厚非。但是要对整栋楼房进行重构,那是一个极其漫长的过程,再者,如果业务没有达到飞跃性的增长,整栋楼房的坚固稳定尤其重要,毕竟人都要舒舒服服地住在里面,谁能容忍,三天两头在自己家里进行装修?

故此,重构的边界显而易见!其实当“人口”激增了,一栋楼房不能再适应的时候,如果有充裕的时间和地方,重建一栋无疑是最好的选择。

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

推荐阅读更多精彩内容

  • 最近一直在从事一款iOS的app的开发工作。为了提高团队整体的代码质量,从项目开始我就一直担负着代码审查重构的工...
    Ifdef_Max阅读 1,747评论 1 13
  • 摘要: 最近一直在从事一款iOS的app的开发工作。为了提高团队整体的代码质量,从项目开始我就一直担负着代码审查...
    明谣_罗潇阅读 159评论 1 0
  • 本文为转载 第一个层次:业务架构的审查重构 这是最高层次的代码审查重构。其实,这个阶段的审查并未真正涉及到具体的代...
    _源计划阅读 324评论 0 0
  • 引言 Martin Fowler的《重构:改善既有代码的设计》一书从问世至今已有十几年时间了,按照计算机领域日新月...
    MagicBowen阅读 4,842评论 3 10
  • 久违的晴天,家长会。 家长大会开好到教室时,离放学已经没多少时间了。班主任说已经安排了三个家长分享经验。 放学铃声...
    飘雪儿5阅读 7,454评论 16 22