浅谈项目代码重构
重构(Refactoring)就是在不改变软件现有功能的基础上,通过调整程序代码改善软件的质量、性能,使其程序的设计模式和架构更趋合理,提高软件的扩展性和维护性。
1 重构无法避免
重构无法避免的原因:
(1)一个大型软件,持续不变的是需求,需求的不断变化导致设计架构和代码的不断改变,重构无法避免。
(2)一个完美得可以预见未来任何变化的设计,或一个灵活得可以容纳任何扩展的设计是不存在的,导致重构无法避免。
(3)日新月异业务变更,导致功能的变化;每日业务数据量的增大,需要性能的提升;产品的深层次架构调整优化,需要革新原有代码。从而,导致设计的调整再所难免。
(4)一个IT团队中,不是所有的程序员开发风格都一样,这样就导致代码质量参差不齐,形成代码Bad Smell (代码坏味道Kent Beck),因此重构无法避免。
2 一个只会开发新功能代码,不会重构老功能代码的程序员,充其量只是一个合格的程序员。
一个大型项目难免会有人员更替,一个程序员,也就不可避免需要维护别人代码,接管别人代码。程序员如果只是单纯开发新功能,或者只偏向喜欢开发新功能。这样的程序员会固步自封,不利于个人成长。
Martin Flower在《重构》中有一句经典的话:"任何一个傻瓜都能写出计算机可以理解的程序,只有写出人类容易理解的程序才是优秀的程序员。"
一个优秀的程序员,不仅能写出优秀的代码,更应当有能力重构别人的代码,并且敢于向质量差的代码挑战。
3 如果你不敢重构老功能代码,说明你对该功能还不够熟悉,对原设计思路还不清楚,或是你的技术能力还有待提升
当你给某一个功能开发一个新功能点,不要急于主管臆断,片面猜测,急于开发,而应当多看,多思考,然后再把新 功能代码和原代码糅合到一起,如果糅合后代码设计结构不够完美。那么需要重构原代码。
利用重构技术开发软件时会把时间分配给两种行为: [重构]与[添加新功能],两种行为可交替进行,一会重构,一会添加新功能。
4 项目开发过程中,风险无处不在,重构可能带来新问题,以及上线发布的问题和风险,但,这不是不重构的借口。
一个软件,只要改动代码,就会存在风险。重构的最终目标不是解决无法添加新功能的问题,而是提升软件本身的生命周期。
一、重构的好处:
(1)最大限度规避潜在长远风险;
(2)提升原有代码的可维护性、可阅读性(容易理解的代码很容易维护和增加新功能。代码首先是写给人看的,然后才是计算机看的);
(3)增加该功能的可扩展性;
(4)延长整个系统项目的生命周期;
(5)学习别人的思想和学习别人的处理逻辑;
(6)有利于最快找到程序错误;(清晰的代码可以更方便的找到bug,重构可以写出更强健的代码)
(7)有利于提高编程速度,提高设计和编码水平;
二、重构的时间
(1)随时进行重构(重构是一种开发的习惯,需要培养自己随时随地重构)
(2)事不过三,代码重复不要超过三次(否则就要“抽”出来)
(3)添加功能时候并一一重构(添加新功能之前,分析并重构,从而更方便添加新功能)
(4)修补错误时(通过重构改善代码结构,能够帮助你找出BUG原因)
(5)code review时(有经验的开发人员Review代码时能够提出一些代码重构的建议)
三、构筑自动化测试体系,最大限度降低重构风险
如果你想进行重构,首先要拥有一个可靠的自动化测试环境。
(1)自动化测试代码的价值
程序员代码编写只占小部分时间,大部分时间用于调试和查找BUG。自动化测试能够大幅减少由于重构代码及新增功能引人的BUG。
(2)XUnit测试框架
XUnit是一个单元测试框架,用于编写自动化测试用例。每次对代码重构后运行一遍测试用例,检查是否引入了Bug。
基于上述,因为怕重构带来问题,只是一种借口。
引述别人的话:【重构已经变成了我的另外一种生活方式,变成了我每天的面包与黄油,变成了我们整个团队的空气与水,以至于无须到书中寻找任何神谕。】
附录:代码坏味道(Code Bad Smell)
重复的代码(这才是真正万恶之源,鄙视一切Ctrl+C/COPY)
过长函数,会导致责任不明确/难以切割/难以理解等一系列问题
过大类,职责不明确,垃圾滋生地
过长参数列(面向对象不是说说而已)
发散式变化,一个类会响应多种需求而被修改
散弹式修改(其实就是没有封装变化处,由于一个需求,多处需要被修改)
依赖情节(一个类对其他类过多的依赖)
数据泥团(如果数据有意义,就将结构数据变成对象)
type code,使用Class替代
switch,少用,考虑多态
过多平行的类,使用类继承并联起来
冗余类,去除它
夸夸其谈的未来性(过度设计)
临时值域,封装它
过度耦合的消息链,使用真正需要的函数和对象,而不要依赖于消息链
过度使用其他类private值域
重复作用的类
不完美的类库,(类库老了,使用者也没办法阿)
纯数据类(类需要行为)
不纯粹的继承(拒绝父类的接口的类)
过多注释,(注释多了,就说明代码不清楚了,尤其是完全废弃的代码,就该直接删除)
相关推荐
改善既有的代码重构(ppt),改善既有的代码重构,改善既有的代码重构PPT
本篇文章主要介绍了CSS代码重构,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
代码重构 重构与模式
浅谈设计模式在Android代码重构中的应用.pdf
《代码重构》书籍的中文版电子版,软件开发者必读书籍。 重构——改善既有代码的设计(中文版)
代码重构
java代码重构经验分享
代码重构技术
JAVA 代码重构 JAVA 代码重构 JAVA 代码重构 JAVA 代码重构 JAVA 代码重构
重构改善既有代码的设计,重构改善既有代码的设计课件,重构改善既有代码的设计PPT
Java 代码 重构 实例 指南 ,欢迎下载
高仿微信,iOSAppTemplate代码重构
代码重构的指导书籍以及设计模式的一些简介
java代码重构
Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例 Java代码重构示例
优秀的程序员,应该懂得代码重构,写出更加优美和逻辑清晰的代码
讲述了java代码的重构总结 规范代码,有必要好好学习
代码重构总结实例
项目重构方案模板、项目重构方案模板ppt,项目重构方案计划模板