重构:从方法论到实践
相关阅读:
年初离职大潮汹涌:一个7年老员工的离职忠告
做为程序员,我到底在恐慌什么
互联网技术(java框架、分布式、集群)干货视频大全,不看后悔!(免费下载)
重构:从方法论到实践
最近部门内部组织了一次大型重构,刚好借着这个机会学习了重构相关的内容,重构可以说代码优化利器,可以很好改善代码结构和开发效率。个人觉得重构应该是随时进行的,开发阶段、测试阶段、上线后,任何时候你觉得代码写得不够好或者有bug都应该重构。
什么是重构
通俗讲就是不影响外界访问的前提下,修改代码的行为。这里的修改代码包括重新设计(业务设计和技术设计)和代码结构的调整。
重构是在不改变软件可观察行为的前提下改善其内部结构
重构通常不是一次性的,它贯穿软件的整个生命周期,只要觉得不合理都是重构的时机。
为什么重构
在接手一个遗留项目的时候,我们往往会遇到以下情况
某甲:代码看了半天还是看不懂啊,尼玛,一个方法上千行,心累ing
若干天后,终于看懂代码了,但是发现IDE一堆警告,一看提示说存在重复的代码,整个项目都是警告,那么多重复代码,不会封装一下吗,靠
试着优化下代码,改着改着发现好多if-else,还是多层嵌套,每个嵌套的判断还TM很复杂,想想还是先不改了,万一改出问题,老子要吃P的(线上故障)
以上情景想必大家一定很熟悉,心底肯定在嘀咕:这么烂的代码哪个孙子写的,不该了,老子重新写一套。。。
其实如果代码在最开始写的时候就考虑设计和扩展问题,并且迭代过程中不断重构,也不会出现上面的问题。这就显得重构在软件开发周期镭显得尤为重要,没有重构,腐败的代码就一直扩散,直到出事。
所以,总结下来,重构有以下好处:
让代码更容易理解
改善内部结构,修改更容易
提高编程速度,加快业务迭代
怎么重构
那么问题来了,怎么开始重构呢?说起来就三步:识别要重构的代码,使用特定手段修改代码,测试
先说第一个也是前提:如何识别代码的“坏味道”:在《重构》一书中提到了很多方面去识别腐败的代码,结合《代码整洁之道》我总结了下,主要有以下方面:
重复代码
解决重复的常用手法有:抽取到单独的函数、放在基类中、使用模板函数模式
模板函数模式是指有一些子类,其中某些函数以相同的顺序执行类似的操作,但各个操作的细节有所不同,不同的子类可以实现自己的操作
如果类存在继承关系,那么适合放在基类中,否则可以创建一个工具类,然后改成直接调用工具类
过长的类或函数
过长的类还是函数,通常意味着做的事情太多,是时候展现真正的技术了,这时候可以拆成多个小类或多个短函数。
拆分类
原则是:单一权责、内聚
常用手法:子类化,如果涉及外部接口的调用,可以抽象出一个接口。
拆分函数
原则是:短小、只做一件事、阅读良好
常用手法:以查询替代临时变量、引入解释性变量、分解临时变量、分解临时变量、移除对参数的赋值、以函数对象替代函数
命名随意
命名随意会导致后期修改理解费劲,徒增烦恼。命名记住一点:名副其实,不要取容易误导的名字
类名应当是名词或者名词短语
函数名应当是动词或者动词短语
无效注释
无效注释包括:废弃的代码、过多的信息、多余的注释。好注释包括以下几种:法律信息、关键代码处解释、警示、TODO、公共API的Javadoc
多个条件判断或switch
这个也很常见,如果遇到这种代码,可以使用多态进行修改,让每种特定类型的子类执行其特定逻辑
其他
在try-catch中用单独的函数封装行为,一段冗长的代码夹在try-catch定位代码没那么直接
一个类中的代码(外部函数调用除外)应该可以从上到下阅读下去,而不用在本类中跳来跳去
实践
在实际的重构中,肯定不是上来就开始修改代码,除非是很小的改动。否则一般需要先梳理既有业务的流程和详细规则,业务梳理后就需要梳理既有技术架构的流程了,梳理后就可以开始评估可以重构的地方,包括业务逻辑统一、技术流程优化、微服务化。
因为重构主要是技术内部的改动,所以梳理既有设计是很有必要的,评估出待修改的点后就可以开始重构了
重构后期还需要进行辅助设计,包括监控、性能优化(缓存、数据库)
扩展
以上内容是自己对重构的一些经验,希望能帮到准备或者已经在重构的小伙伴
可以参考我自己梳理一张脑图:
看完本文有收获?请转发分享给更多人
欢迎关注“互联网架构师”,这里是聚集了10W+技术的架构师圈子,我们分享最有价值的互联网技术干货文章,助力您成为有思想的全栈架构师,我们聊互联网、聊架构,聊人生,聊职场,助你最快进阶!打造最有价值的架构师圈子和社区。
本公众号覆盖中国主要首席架构师、高级架构师、CTO、技术总监、技术负责人等人 群。分享最有价值的架构思想和内容。打造中国互联网圈最有价值的架构师圈子。
长按下方的二维码可以快速关注我们
如想加群讨论学习,请点击右下角的“加群学习”菜单入群
重构:从方法论到实践相关推荐
- 阿里云官方出品:全面总结阿里云云原生架构方法论与实践经验
本书亮点 阿里云官方出品,阿里云智能总裁.阿里巴巴首席技术官等推荐,全面总结阿里云云原生架构方法论与实践经验. 读者对象 开发人员:本书可帮助开发人员熟悉云原生架构的相关技术,使之能够从宏观架构的角度 ...
- 《架构设计2.0大型分布式系统架构方法论与实践》三高笔记
目录 前言 高并发 高并发读 动静分离与CDN加速 缓存 并发读与Pipeline 重写轻读 读写分离 批量 高并发写 数据分片 任务分片 异步化 批量 高可靠 七板斧 高可用 高可用架构几个核心问题 ...
- 云原生数据中台:架构、方法论与实践
前言 第一部分 数据中台与硅谷大数据平台 第1章 全面了解数据中台 1.1 数据中台概念的起源 3 1.1.1 艺电的"数据中台"改造 4 1.1.2 Twitter的数据驱动 6 ...
- 数据治理方法论和实践小百科全书
什么是数据治理? 数据治理是指从使用零散数据变为使用统一数据.从具有很少或没有组织流程到企业范围内的综合数据管控.从数据混乱状况到数据井井有条的一个过程. 从范围来讲,数据治理涵盖了从前端业务系统.后 ...
- 对话式AI系列:中关村科金领域知识中台建设方法论与实践
依托于对话式AI技术的智能对话系统,相对于传统的营销服系统(如呼叫中心.客服系统)而言,不仅仅是一款连接用户的沟通系统,更是一款拥有决策能力的.以自然语言进行人机对话交互的系统,具备实时交互能力.客户 ...
- 大数据培训 | 数据仓库构建方法论和实践
数据仓库的价值 构思一个主题讨论数据仓库的构建方法论,包括数据仓库的价值.选型.构建思路,随着数据规模膨胀和业务复杂度的提升,大型企业需要构建企业级的数据仓库(数据湖)来快速支撑业务的数据化需求,与传 ...
- 实战工作十年的Code Review方法论与实践总结
作为卓越工程文化的一部分,Code Review其实一直在进行中,只是各团队根据自身情况张驰有度,松紧可能也不一,这里简单梳理一下CR的方法和团队实践. 一.为什么要CR 提前发现缺陷 在CodeRe ...
- 数据中台建设方法论-4 实践
讲完基本一些理论内容,下面可以讲一下实践过程的一些经验,下面以实施实现过程中,讲一下实践过程中一些难点 业务调研 数据中台并非一上来就咔咔咔按照理论开始搭建,这样十有八九后面要么返工要么做不下去.数据 ...
- 神策数据王灼洲:方法论 + 实践,全面解析数据采集方案,必看!
数据采集是数据应用的源头,指导企业在产品.运营和业务等多方面决策.本文作者王灼洲从数据采集需求出发,详细解读了如何实现高效.可用的数据采集方案.主要内容如下: 数据采集的定义和重要性 业内常见的数据采 ...
- 从Vue重构到React的微应用实践总结
前言 大家好,我是海怪.最近换到了新部门,在做智能平台相关的内容.我接到的第一个任务就是把以前前端的项目重构一次. 说是重构,不如说是重写一遍.因为原来的项目是 ant-design-vue + vu ...
最新文章
- linux下文件夹函数,如何从linux上的文件夹中找到一个函数
- install tabix/bgzip
- 【转】 Nginx深入详解之多进程网络模型
- 顺序表应用4:元素位置互换之逆置算法
- Robot Framework测试用例并行执行
- excel 宏编程_在 Excel 中使用 Python 开发宏脚本
- 算法- 分治算法(实现汉诺塔)
- android7.0提示定位,解决android7.0上某些PopuWindow显示位置不正确的问题
- R语言-merge和rbind
- mysql or 短路_MySQL是否使IF()函数短路?
- linux下编译C++文件基本命令
- 语音广播服务器,智慧校园语音广播说明(二)
- 三极管原理-导通条件
- 优色专显教你led显示屏诺瓦刷屏教程
- JavaWeb如何判断账户密码
- FIR 滤波器参数意义
- 关于华为产品生命周期
- 肉蛋堡记 - 符皓冉
- 初识顶点/片元着色器
- 《钻石王牌》:热血青春·棒球1号位