重构——程序猿的艺术

何为重构

重构:在不改变软件对外表现和行为的前提下修改已有代码使其易于理解,便于扩展

重构就是让代码易于程序猿理解。在重构的世界里代码是写给程序猿看的而非写给机器看,我们会忽视性能而专注于让代码对程序猿更友好(先让代码跑通,再去重构,最后才考虑性能优化)

为什么要重构

  • 在添加功能前重构,可以时原有的代码更易扩展,简化功能添加难度
  • 在改bug前重构,可以优化代码的结构,使逻辑更加清晰,更容易找出bug
  • 在评审代码时(无论是自己的还是别人的代码都行)进行重构,可以加深对代码逻辑的理解

重复一遍:

重构时机 好处
添加功能前 更易扩展
改bug前 更易找出bug
评审代码时 加深理解

怎么重构

看图:

第一步 建立测试框架

测试框架是判断重构成功与否的关键,再重复一遍:

重构:在不改变软件对外表现和行为的前提下修改已有代码使其易于理解,便于扩展

重构不能改变代码对外的表现和行为,测试框架正是要测试重构是否改变了代码的对外接口,如果不能通过测试,必须对重构进行修复(回滚到重构之前)

第二步 寻找代码坏味

代码坏味(Bad Smell),出自《重构——改善既有代码的设计》的作者,作者认为代码的不合理设计就像婴儿的尿布散发出来的Bad Smell一样,当你闻到它的时候,就应该警惕:该给代码换尿布了

我们要重构代码,首先要找出需要重构的地方,作者总结了几种特殊“味道”的Bad Smell,我把它写在了【怎么重构】的下面(代码坏味)

第三步 代码重构

使用针对代码坏味的重构手段对其进行重构即可

第四步 测试

使用第一步建立的测试框架对重构进行测试

重构可不是写Bug

代码坏味

我只收录了《重构——改善既有代码的设计》中一部分常见的代码坏味,更多的请查看原书

我极力推荐给大家这本书:世界软件开发大师Martin Fowler的《重构——改善既有代码的设计》

坏味 表现 对应的重构手段
重复代码块 相同代码重复出现 抽取方法
方法过长 方法体长度超过30行 抽取方法
方法参数过多 方法所需的参数超过3个 使用对象封装参数集
临时变量存在 代码中有临时变量 使用查询方法取代临时变量
switch语句存在 代码中有switch分支 使用多态取代switch分支
类过长 类的长度超过100行 转移成员变量和函数
抽取类
发散式变化 引发一个类修改的原因不只一个 抽取类
发散式修改 一个类修改,引发修改的其他类不止一个 抽取类
数据依赖&过度亲密 一个类过多调用另一个类的成员和函数(甚至超过了拥有成员和函数的类) 转移成员变量和函数

重构手段

等我把这些文章全写完发了,再给你们提供链接

  • 抽取方法

    到处都是重复的代码?方法体又臭又长看不懂?快来试试抽取方法(Extract Method)吧,保证药到病除!

  • 使用对象封装参数集

    答应我,别再给方法弄一长溜的参数了,好吗?

  • 使用查询方法取代临时变量

    你这方法里怎么这么多临时变量?我完全记不住每个变量是用来干什么的!

  • 使用多态取代switch分支

    “来看看外包老哥写的超长switch语句”这种文章又登上首页了

  • 及时打断if条件分支

    外包老哥总是被黑的幕后黑手找到了!

  • 转移成员变量和函数

    道理我都懂,可是你一直在用的成员变量为什么要让我负责管理?

  • 抽取类

    总觉得,是时候new一个替身出来帮我干活了

  • 将数据的处理函数转移给持有数据的类

    或许,这个锅应该由你来背

  • 向父类转移成员变量和函数

    所有子类都需要做的事,为什么不让父类直接做了?

  • 注意集合型成员变量的get/set方法!

    有人动了我的集合对象,可是我却不知道!

    技术不分领域,思想一脉相承

原文地址:https://www.cnblogs.com/chengweijun/p/12165711.html

时间: 2024-10-10 22:45:35

重构——程序猿的艺术的相关文章

资深程序猿冒死揭开软件潜规则:无法维护的代码

原始博文公布于: Roedy Green's Mindproducts (http://mindprod.com/unmain.html ). 翻译链接: 点击打开链接 2014年11月25日 03:11 怎样编写无法维护的代码 让自己稳拿铁饭碗 ;-) Roedy Green 简单介绍 永远不要(把自己遇到的问题)归因于(他人的)恶意,这恰恰说明了(你自己的)无能. -- 拿破仑 为了造福大众,在Java编程领域创造就业机会,兄弟我在此传授大师们的秘籍.这些大师写的代码极其难以维护.后继者就是

50个程序猿笑话

1.程序猿最烦两件事,第一件事是别人要他给自己的代码写文档,第二件呢?是别人的程序没有留下文档.2.程序猿的读书历程:x语言入门->x语言应用实践->x语言高阶编程->x语言的科学与艺术->编程之美->编程之道->编程之禅->颈椎病康复指南.3.还没上大学的时候,高三暑假,跑到家那边的图书城想买传说中的C++的书,然后看到一本C#,我一看,嘿,这个++还写得挺艺术的,重叠起来了,于是把C#买了回来--4.问:程序猿最讨厌康熙的哪个儿子?答:胤禩,因为他是八阿哥(b

程序猿技术练级攻略

伯乐人才网6月9日发表了<写给即将入行的程序猿的一封信>,翻译自<An open letter to those who want to start programming>.我的朋友(他在本站的id是Mailper)告诉我,他希望在酷壳上看到一篇更具操作性的文章. 由于他也是喜欢编程和技术的家伙.于是,我让他把他的一些学习Python和Web编程的一些点滴总结一下.于是他给我发来了一些他的心得和经历,我在把他的心得做了不多的增改,并依据我的经历添加了"进阶"一

转-程序猿的一些幽默 程序猿段子大全

1.程序猿最烦两件事,第一件事是别人要他给自己的代码写文档,第二件呢?是别人的程序没有留下文档. 2.程序猿的读书历程:x 语言入门 —> x 语言应用实践 —> x 语言高阶编程 —> x 语言的科学与艺术 —> 编程之美 —> 编程之道 —> 编程之禅—> 颈椎病康复指南. 3.还没上大学的时候,高三暑假,跑到家那边的图书城想买传说中的C++的书,然后看到一本C#,我一看,嘿,这个++还写得挺艺术的,重叠起来了,于是把C#买了回来…… 4.问:程序猿最讨厌康熙

Java程序猿学习当中各个阶段的建议

回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议 引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力不是很好,不像一些记忆力强的人,面试完以后,几乎能把自己和面试官的对话都给记下来.LZ自己当初面试完以后,除了记住一些聊过的知识点以外,具体的内容基本上忘得一干二净,所以写这篇文章其实是很有难度的. 但是,最近问LZ的人实在是太多了,为了避免重复回答,给自己省点力气,干脆就在这里统一回复了. 其实之前LZ写过一篇文章,但是那篇文章更多的是在讨论“面试前该不该刷题”这个

做程序猿的老婆应该注意的一些事情

今天来说说一位女青年的老公以及他们的事儿.如有雷同,纯属巧合. 十一年前我和程序猿第一次见面,还是大一军训期间.我甚至不确定程序猿是否记得那是第一次见面.当时不小心装伪文艺参加了吉他社,想借一本吉他入门书,然后同在吉他社热心的海哥说他一同学有,就带着我去拿书了.于是我们第一次"见面"了,我只看见一个对着电脑,佝偻着背的背影--严重怀疑程序猿根本没抬头看一眼那个已经晒得像反转熊猫一样的妹子,因为他递过来书以后,又迅速投入到了电脑的怀抱,相对应的,我也不记得他长什么样了. 我从来没有读懂过

提高情商的好书推荐 (程序猿不仅要智商也要情商)

程序猿不仅要智商也要情商 上班与同事与领导会让很多IQ爆表 但EQ(情商)渣渣的童鞋很痛苦, 同时你想有好的发展未来就要懂得一些... 希望通过这篇博文能对你有所帮助与进步 同时记住不忘初心!!!! 有哪些可以提高你情商的书(新增书作者) 首先,你要挑对适合你的书! 赶紧把那些什么之类二十句之类的扔掉,别再看朋友圈转发的那些鸡汤! 卡内基什么的我还是保留意见.来看两句:人性的弱点之十八:不尊重他人的意见 反之:对别人的意见表示尊重,不管是对是错 人性的弱点之十九:不敢承认自己的错误 反之:如果你

关于程序猿的几个阶段!

程序猿的职业生涯是一段充满起伏的有趣经历.考虑到其陡峭的学习曲线.全然能够预见你将经历挫折.启蒙.骄傲自大这几个时期.以及穿插其间的各种心路历程.在这篇文章中让我们轻松一下.通过一系列搞笑 gif 图来回想当中的每个阶段 . 阶段1-菜鸟 初入职场的日子,我们都充满激情. 在此期间.你毫无头绪,根本不知道该做什么.就像鱼儿离开了水.每一行代码对你来说都是个迷. Doctype?哈?见鬼,这个<div>究竟是干什么用的?第一个阶段令人生畏.让人提心吊胆.却又激动人心.究竟有多少种该死的语言要学啊

连载《一个程序猿的生命周期》- 40、张弛有度的工作,留给自己一些思考的时间

一个程序猿的生命周期 微信平台 口   号:职业交流,职业规划:面对现实,用心去交流.感悟. 公众号:iterlifetime 百木-ITer职业交流奋斗 群:141588103    微   博:http://www.weibo.com/u/5723400254 二维码: 希望大家能够加微信公众号,以后会分享有营养的东西. 第一家公司,小型国企,呆了7年多,为了心中仅存的理想,勇敢的跳了出来:进入第二家公司,大型股份制公司,呆了1周时间,为了发展的更快.更容易实现自己的目标,毫不犹豫的离开了: