重构 - 代码整洁之道

前言
不管对于何种语言,重构都是软件开发过程中不可或缺的一部分。如果已经了解重构的基础,可以直接跳往至文章后面的重构案例部分。

重构背景
“如果尿布臭了,就换掉它”。

随着业务需求的不断加入,代码随着时间的推移变得越来越糟。
这其中可能包括以下坏味道(仅列举):
1.重复的代码
2.过长的函数
遵循一条原则: 每当感觉需要注释来说明什么的时候,可以尝试将需要说明的东西写进一个函数中
3.冗赘类
当子类没有做足够的工作的时候,或者说在可见的预期内,不会有新的情况出现,考虑将类内联化。
4.过长的类
这种情况容易出现冗余代码。比如如果类内出现了多个变量带有相同的前缀或者后缀,这意味着你可以考虑把他们提炼到某个组件内,或者考虑这个组件是否可以成为子类,使用提炼类的手法来重构。

什么是重构
我们回过头来看一下"什么是重构"

1.不改变软件可观察行为的前提下,改善其内部结构
2.以提高理解性和降低修改成本

摘自《重构 - 改善既有代码的设计》(下面简称《重构》)

何时重构?
我们需要明确的一点是: 重构不是一件应该特地拨出一段时间来做的事情。重构不是目的,但是重构可以帮助你把事情做好。

事不过三,三则重构
1.重复性工作,既有的代码无法帮助你轻松添加新特性时
2.修补bug时,排查逻辑困难
3.code review 可以让他人来复审代码检查是否具备可读性,可理解性
4.太多的代码无注释,已然连自己都无法快速理清代码逻辑

重构的衡量指标

1.数量: 代码的行数
2.质量: 代码复杂度,耦合度,可读性,架构依赖复杂度等
3.成本: 花费的时间
4.回报(成果): 支持后续功能的快速叠加,解决现有因代码设计问题无法优化的矛盾等

抓重点 抓重点啦

说了这么多废话,其实大家都明白没有与实践结合的理论都是空虚的。
但是 重构和 设计模式一样,也是需要一个"学习——领悟——突破"的过程。第一步的学习让你了解基本的重构手法,第二步的实践勾起你对重构手法的回忆以及重温应用,第三步的应用以及实践经验激发你的思考,领悟以及总结,以致于灵活运用。
但凡是人,总是在不断学习,不断温习,以达到具体场景具体应用,灵活自如。
重构是一个很大的话题,《重构》作者本人也是经历了N多的项目,以及多年的经验才总结出来的重构技巧。

重构技巧

《重构》一书作者总结的重构手法实在是太多了,只能通过图片来展示一下所有作者总结的重构列表。
具体的补充,大家可以看看《重构》一书。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式和Java深入微服务原理改造房产销售平台,需要完整Java全套资料可以扫下方微信码免费领取
在这里插入图片描述项目效果展示图

重构的实践

作者推荐的一种做法:
1.随机挑选一个目标
先给自己选择一个目标(譬如“去掉一堆不必要的子类”),然后朝着目标前进,每一步走得小而坚定
2.没把握就停下来
当你无法证明自己所做的一切能够保证原有程序的逻辑和语义时,请你停下来思考:既有的重构是改善了还是毫无成果需要撤销。
3.保证每次重构后的测试都能正常跑通

作为开发者, 应当把重构作为开发的一部分,一边开发一边重构。在快速堆叠代码,实现基本需求功能的基础上,写好测试用例,保证功能不变,逐步重构。
这也是我们团队要求每个人都掌握重构这门必备技能的原因。优秀的程序员应当尽量避免低质量的代码。

重构案例
故事场景

1.有三种类型的电影,顾客可以进行租赁
2.租赁规则

(1)价格计算规则:
普通片儿 —— 起步价2¥,超过2天的部分每天每部电影收费1.3元
新片儿 —— 每天每部3元
儿童片 —— 起步价2¥,超过3天的部分每天每部电影收费0.8元
(2)积分计算规则:
每借一部电影积分加1,新片每部加2

原始代码
CODEPEN

程序结果:(请保证重构后结果不变~)
在这里插入图片描述
.类图
在这里插入图片描述在这里插入图片描述
基本技巧
小步前进,频繁测试(保证足够的测试来支持你的重构行动)
使用智能开发工具(比如VSCode右键可以将过长的函数代码拆解函数化)

推荐书籍
《代码整洁之道》
《重构 - 改善既有代码的设计》
《修改代码的艺术》
《代码大全》

欢迎扫码下方二维码领取资料。之后我会给大家推荐合适的网络课程。
(PS:所拥有资料及所推荐课程皆是免费的)
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44074342/article/details/84976832