`
fanjf
  • 浏览: 332766 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

浅谈项目代码重构

 
阅读更多

浅谈项目代码重构

 

       重构(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原因)

  (5code review(有经验的开发人员Review代码时能够提出一些代码重构的建议)

 

      三、构筑自动化测试体系,最大限度降低重构风险

    如果你想进行重构,首先要拥有一个可靠的自动化测试环境。

(1)自动化测试代码的价值

    程序员代码编写只占小部分时间,大部分时间用于调试和查找BUG。自动化测试能够大幅减少由于重构代码及新增功能引人的BUG

(2)XUnit测试框架

    XUnit是一个单元测试框架,用于编写自动化测试用例。每次对代码重构后运行一遍测试用例,检查是否引入了Bug

 

       基于上述,因为怕重构带来问题,只是一种借口。

 

引述别人的话:【重构已经变成了我的另外一种生活方式,变成了我每天的面包与黄油,变成了我们整个团队的空气与水,以至于无须到书中寻找任何神谕。】

                                                                                                        

 

附录:代码坏味道(Code Bad Smell

重复的代码(这才是真正万恶之源,鄙视一切Ctrl+C/COPY

  过长函数,会导致责任不明确/难以切割/难以理解等一系列问题

  过大类,职责不明确,垃圾滋生地

  过长参数列(面向对象不是说说而已)

  发散式变化,一个类会响应多种需求而被修改

  散弹式修改(其实就是没有封装变化处,由于一个需求,多处需要被修改)

  依赖情节(一个类对其他类过多的依赖)

  数据泥团(如果数据有意义,就将结构数据变成对象)

  type code,使用Class替代

  switch,少用,考虑多态

  过多平行的类,使用类继承并联起来

  冗余类,去除它

  夸夸其谈的未来性(过度设计)

  临时值域,封装它

  过度耦合的消息链,使用真正需要的函数和对象,而不要依赖于消息链

  过度的deleate

  过度使用其他类private值域

  重复作用的类

  不完美的类库,(类库老了,使用者也没办法阿)

  纯数据类(类需要行为)

  不纯粹的继承(拒绝父类的接口的类)

过多注释,(注释多了,就说明代码不清楚了,尤其是完全废弃的代码,就该直接删除)

分享到:
评论

相关推荐

    浅谈CSS代码重构

    【CSS代码重构】是优化和改进现有CSS代码的过程,旨在提高代码的可读性、可维护性和性能,同时保持原有功能不变。重构的关键在于改善代码结构,使其更符合最佳实践和设计模式,以便团队协作和长期项目的可持续发展。...

    浅谈设计模式在Android代码重构中的应用.pdf

    【摘要】本文主要探讨了设计模式在Android应用开发中的重要性,特别是在代码重构过程中的应用。随着Android系统的广泛使用和应用市场的激烈竞争,开发者面临着提升代码质量和运行效率的压力。文章指出,代码重构是...

    浅谈vue项目重构技术要点和总结

    "浅谈vue项目重构技术要点和总结" Vue 项目重构技术要点和总结 一、Vue 数据更新,视图未更新 在 Vue 项目中,我们经常会遇到一个问题,即数据更新了,但是视图没有更新。这个问题的解决方案有多种,以下是其中...

    重构思路浅谈(最后一根稻草型时机)

    《重构思路浅谈:最后一根稻草型时机》 重构,是软件开发过程中不可或缺的一环,旨在提升代码质量,改善系统架构,确保系统的可持续性和稳定性。本文将探讨一种特殊的重构时机——“最后一根稻草”型时机,以及重构...

    浅谈PHP编程习惯.pdf

    8. **代码重构** 随着项目的发展,定期审查和重构代码以优化结构和性能是必不可少的。保持代码的简洁和模块化,可以降低维护成本。 9. **使用版本控制** 使用版本控制系统(如Git)可以跟踪代码更改,方便协作,...

    浅谈java!

    - **开源项目**:参与开源项目贡献代码,提升技术实力。 - **实习机会**:争取实习岗位,在实际工作中锻炼技能。 - **模拟面试**:参加模拟面试活动,提前适应职场氛围。 #### 六、持续学习与进阶 技术日新月异,...

    IOI国家集训队论文集1999-2019

    骆 骥 -《由"汽车问题"浅谈深度搜索的一个方面——搜索对象与策略的重要性》 毛子青 -《动态规划算法的优化技巧》 俞 玮 -《基本动态规划问题的扩展》 张一飞 -《求N!的高精度算法》 ## 2002 戴德承 -《退...

    浅谈J2me游戏如何快速移植到Android

    ### 浅谈J2me游戏如何快速移植到Android 对于许多从事J2ME开发工作的人员而言,可能会突然间面临一个紧迫的需求:那就是将原本在J2ME平台上的游戏移植到Android平台上。乍一看,这似乎是一项庞大且复杂的工程,但...

    浅谈“三层结构”原理与用意

    3. **可扩展性**:随着业务需求的变化,可以通过增加新的业务层或者调整现有层来扩展系统功能,而无需大规模重构。 4. **复用性**:中间业务层的业务逻辑可以被多个表现层调用,降低了代码重复,提高了代码的复用性...

    软件开发:浅谈计算机软件可维护性方法.pdf

    自动化工具的运用也不容忽视,如代码检查工具、重构工具、版本控制工具等,它们能够自动化地帮助开发者发现代码中的问题,提高软件质量。 质量保证审查是软件开发中一个不可或缺的环节。它包括多个阶段的检查,比如...

    浅谈高职《C语言程序设计》教学中提升学生学习动力.pdf

    通过解构和重构代码,学生能逐步掌握编程思维,增强学习动力。 再者,及时的反馈和评价也是保持学生学习动力的有效手段。教师应当提供定期的作业和测试,及时给予学生反馈,指出他们在编程中的错误和不足,帮助他们...

    WebRebuild北京第一届交流会之5:《网站重构who am i》——Tommy[范俊豪]

    网站重构是一种优化网页和应用程序的过程,旨在提高网页的...总的来说,《网站重构who am i》的主题分享深入浅出地讲解了网站重构的各个方面,从角色转变到技术实践,再到未来的趋势,为参会者提供了宝贵的见解和指导。

    浅谈React碰到v-if

    最近在重构公司老项目,由于本人以前的技术栈是vue, 换工作后发现现在公司的技术栈是react, 所以重构的过程是及其痛苦。加之项目又是几年前的老项目,不敢大改,比葫芦画瓢比比皆是。本文就介绍下遇到的一个常用的...

    C#权限管理和设计浅谈

    设计时应考虑到未来可能增加的新功能和新的权限层次,避免因权限系统僵化导致的大量重构工作。 3. **安全性**:确保只有拥有相应权限的用户才能执行特定操作,防止非法访问和数据泄露。 4. **易操作性**:用户界面...

    浅谈Angular单元测试总结

    单元测试的长期益处包括提高代码质量、减少维护成本、降低重构难度,但短期内可能增加开发工作量,尤其对于进度紧张的项目,这可能成为开发人员的负担。即便如此,单元测试对于保障软件质量、提前发现问题以及确保...

    PHP解耦的三重境界(浅谈服务容器)

    有时需要多人合作,有时也可以自己独立完成,不管是哪一种,随着代码量上升,写着写着就“失控”了,渐渐“丑陋接口,肮脏实现”,项目维护成本和难度上升,到了难以维持的程度,只有重构或者重新开发。 第一重境界 ...

    浅谈Python小波分析库Pywavelets的一点使用心得

    本文通过具体的代码示例介绍了PyWavelets库的一些基础使用方法,包括阈值处理、信号分解与重构等。通过这些示例,读者可以更好地理解如何使用PyWavelets来进行小波分析,并将其应用于实际的数据分析项目中。此外,...

    浅谈React中组件逻辑复用的那些事儿

    在React中,复用组件逻辑意味着减少代码冗余、提高代码复用率、降低项目复杂度,并且保持组件的独立性和可测试性。 ### Mixins的介绍与使用 在早期的React版本中,开发者常常使用mixin来复用组件逻辑。Mixin是一种...

Global site tag (gtag.js) - Google Analytics