文章目录
- 序
- 重构手法
序
庸人之见:如果它还可以运行,就不要动它!
伴随着需求的大量迭代没有人可以在最初就预料到到一个程序最后会变成什么样子。所以在一个程序非常混乱,补丁无数,难以维护时,重写便是最好的重构。当然重写也是最彻底的重构,但是重写是一件耗时耗力且在用户层面难以感知到的操作,所以时时刻刻的重构远优于一次彻彻底底的重写。对于一个成熟的程序来说进行不间断的重构是必要的。重构的目的就是让程序不断保持-易维护易扩展。
重构手法
-
对比测试:这个测试不是单元测试,而是对比测试!当你进行重构时,也就是不得不修改之前的代码时,首先就是复制一个新的方法,然后建一个测试方法,保证新旧方法在入参一致时出参一致,这样可以最快的界定是否重构有效,省去自己对比的时间,此时你的测试程序只应该输出success或者failed,而不应该每肉眼对比是否输出一致,会浪费大量的额时间。
-
何为重构:重构不是重写,它是以微小的步伐进行程序的修改,重构最好的伙伴就是idea中的Refactor(重构)里面的各种操作,这就是idea的重构工具!里面有大量的使用方法,例如修改名称,修改变量类型,提炼方法、移动方法等等。–编写工具发展至今,idea中真的扩展了很多实用的工具啊。原来 refactor就是重构的意思,果然09的书发展到现在有了很多实现了。原著99年,翻译09年。
-
见字知义:变量名称,方法名称,类名称,都是值得细细考量的,务必做到见字知义,利用idea的replace/rename大胆的去修改名称;任何一个傻瓜都可以编译出计算机可以理解的代码,唯有写出人类容易理解的代码,才是一个优秀的程序员。–代码一定要表现出自己的目的,这一点很重要。
-
临时变量:如果一个变量只使用一次,那么就没又必要为其命名,也就是说尽量去除一些临时变量,这样可以简化代码,也方便后续的查阅代码。
-
重构定义:对软件内部的一种调整,目的在于不更改软件可观察行为的前提下,提高其可理解性,可扩展性,可维护性。实现这种目的的行为就是利用重构手法,保持出参入参不变的情况下,使代码结构更加完美。
-
代码重构其目的只是为了提高代码的可读性和可维护性,因此有时候和性能是冲突的,性能优化是另一件事,性能优化时为了提升代码执行速度,往往会让代码结构不那么完美,二者目的不同。
-
重构不应该是特定时间进行或者特定安排下进行的事情,应该平滑的进行于每次更新功能,它的核心目的就是让代码更好理解,所以添加新功能时重构相得益彰。
事不过三:第一次做某件事情时放手去做,第二次做类似事情时就应该重构了,第三次做类似事情时就必须重构。提高代码利用率,比如jml17中的定向奖励就应该重构。
添加新功能时重构:尤其是在老功能上添加新功能时 + 修改bug时重构:一份清晰的代码其bug应该是一目了然 + review代码:复核代码时对于经验丰富的人来说可能没什么帮助,但是对于新手来说成长巨大。 -
何为间接层:不仅是消息队列,其实java中的多态、继承不也可以理解为是间接层吗,间接的意思不就是说曲折的达到目的,在目的层的前面在加一层。
-
重构和预设计并不冲突,预设计其实是一个项目的基石,软件商设计是一个项目的基石,而开发更像是对着设计图施工,所以二者并不冲突,并且同样重要。
-
事以密成,语以泄败。重构是一个对开发人员有利,但是对公司部分不懂技术的人员看来不利的事情。原因很简单,因为重构需要花费时间。所以有的时候在不被人理解的情况下,可以默默的做起来,把重构当成细水长流的一件事。
-
简单的简洁性不应该牺牲代码的执行性能,当二者冲突时,最好可以优先后者,虽然计算机的执行速度越来越快,但是性能依旧是越快越好。提升习性的三种办法:
给整体评估一个时间,然后依次划分,给每段代码一个上限时间然后去优化。
对每一行代码都追求性能,最快的执行速度
优化最常用的代码。