公众号|松华说|代码质量之持续提升
  • 分享在京东工作的技术感悟,还有JAVA技术和业内最佳实践,大部分都是务实的、能看懂的、可复现的

扫一扫
关注公众号

代码质量之持续提升

博客首页文章列表 松花皮蛋me 2020-01-03 14:50

一、重构的作用        

我曾经单纯的认为修改少就意味着错误少,所以习惯性在原有逻辑上打补丁,可错误往往就是因为那不起眼的修改引起的。聪明的人警醒我,我存在认知错误,因为添加一个新功能的最好办法是,先修改现有的代码,使逻辑更加容易被理解,使新功能容易被加入,避免设计腐败。


二、代码的坏味道        

令我印象最深的是项目中大量的过度耦合的消息链。


        内容校验链的逻辑,都使用本地线程存储ThreadLocalLocalT对象和自定义Result对象在消息链中进行传递变量,中间任何一个节点都有可能修改全局变量,使得一个类与另外一个类有太多合作,甚至注释上写着,某个类必须依赖前面的类才行,不能调整执行顺序。


        实际上它们并不是必须按照严格的顺序执行的,如果重构成基本校验和业务校验两个消息链,业务校验的参数依赖于基本校验的返回结果,业务校验链中不允许修改全局变量,就不至于过分耦合了。而重构前,当我想把消息链中某些执行器修改成异步执行时,困难重重。因为它违背了可扩展性设计理念,无法满足无状态的约束。


        其他关于代码的坏味道就不一一说明了,常见的有过多的参数列表、重复的代码(功能语义重复、执行逻辑重复、实现逻辑重复)、一个类受多种变化的影响、一种变化引发多个类相应修改、数据泥团(很多地方出现相同的三四项数据)、过度设计、令人迷惑的暂时字段。


三、重构手法       

 重构作为保持代码质量不下降的有效手段,利用的就是面向对象、设计原则、设计模式、编码规范这些理论。比如重新组织数据、重新组织函数、在对象之间搬移特性,更加具体的类似说明有,提炼函数、引入解释性变量、移除对参数的赋值、隐藏“委托关系”等等。


四、总结


最后,我们应该在软件演进过程中持续进行重构,比如添加功能、修补错误、复审代码时,我们都进行一系列的微操作重构,以使得软件能以良好的状态演进,并且不影响原有功能的正常运作。