对软件重构的认识与重构原则

软件重构 重构这个话题是老生常谈的了,无论对于C、java亦或Python程序员来讲,只要项目有一定的代码量,重构就是无可避免的。正好这段时间我正在给一个android应用项目(下文统称项目X)做重构,这个项目原本是由一个完全不会写代码的人写的,可以说项目没有任何可读性,逻辑也没有很清晰。本文我会结合自己的实践和一些参考资料谈谈我对重构的一些理解。 什么是重构? 重构是在保证不改变外部行为的前提下,对内部结... 阅读详情

一、什么是重构

重构就是在不改变软件的可观察行为的前提下,对代码进行修改,改进程序的内部结构。

有两层含义:

  1. 不改变软件的可观察行为,对代码内部结构进行调整,不做大的变动,不做架构上调整,提高代码的可理解性,简单化,降低代码的修改维护成本。
  2. 不改变软件的可观察行为,通过一些重构手法,如设计模式、设计原则,调整软件的架构、模块等内部结构,优化代码,提高整体代码的质量。

二、为什么要重构

技术不断发展,程序会慢慢老化,老程序会存在以下问题:

  1. 大量重复代码让人很难理解,新增特性需要涉及阅读理解其他一大堆的无用代码。
  2. 程序接口文档缺失,模块内外耦合严重。
  3. 模块内的功能实现堆砌式,随便使用全局变量、控制变量,不断增加控制分支,导致维护难度不断增加,程序异常也不断增加
  4. 运行时逐渐出现内存、CPU、存储空间等资源不足,使用过高等问题出现,急切优化程序
  5. 功能类似,代码重复,工作量增加,效率很低,不利于软件发展。等等

当一个软件产品出现了以上问题的,就需要重构该软件产品了。

三、重构的好处

  1. 重构可以改进程序内部结构,跟着技术不断发展,防止逐渐腐败
  2. 重构可以使软件产品的架构更清晰,简化代码裸机,去除重复代码,使人更容易理解,更容易维护,更容易持续演进
  3. 重构可以使软件产品更容易拓展,提高开发效率。符合program smart标准:
  • performance高效
  • protable可移植
  • security安全
  • maintainable可维护
  • reliability可靠
  • readable可读
  • testable可测试

四、重构的分类

重构有多个层次,每一层的重构意义不同:

  1. 第一层:功能正确,外在功能表现与需求一致
  2. 第二层:无漏洞风险,满足基本安全规范要求
  3. 第三层:代码整洁,满足基本的编码规范要求,代码简洁易懂易维护
  4. 第四层:架构优雅,高内聚低耦合,易拓展、可移植,使用算法精巧
  5. 第五层:软件产品在不断的演进,不断更新。

具体的重构类别:

  1. 架构级重构:属于大规模的重构活动,要求比较高,是一项大功能,需要架构师、专家参与并落实
  2. 模块级重构:开发人员可以评估落实方案,要求一般。
  3. 函数级重构:最多的重构活动,在日常的开发过程即可完成。

五、重构的时机

重构应该是随时进行,不要为了重构而重构,重构是为了将我们的程序优化得更好,更更好的为我们省事,高效。所以我们需要把握好重构时机,及时重构。

  1. 重复的事情,果断重构。如果做一件事情,重复超过三次,那么第三次就得选择重构去做。
  2. 在新增特性代码的时候,发现有更好的实现,方便未来拓展,使开发更快速、更舒畅,可以考虑重构。
  3. 修改bug的时候,发现原来的旧代码不够清晰,并且很难发现错误,可以考虑重构
  4. 在我们组织代码检视活动的时候,根据经验,存在问题,有改善设计的空间,可以考虑重构。
  5. 如果代码太混乱,设计完全错误,不考虑重构,直接重写,重新设计。
  6. 如果没有任何重构思路的时候,不要考虑重构。
  7. 如果时间很紧,重构的工作量又很大,会影响整个工作,建议推迟重构。

六、重构的原则

重构的前提是:先识别软件代码的坏味道,制定好重构方案后,才能进行重构。

重构时最重要的一点是:需要将新增代码与重构分开,重构前与重构后需要有测试用例保障,确保继承性功能不被破坏。

  1. 新增新功能或者修改bug时,不要将重构代码放在一起带进去,新增新功能只管添加新功能代码即可。
  2. 重构时,也不能带有新功能,只管改进原来的程序结构即可
  3. 一次只做一件事,一次重构只针对一种类型功能进行重构

下一篇:如何识别软件代码中的坏味道。

软件重构(Refactoring)是软件开发过程中的一个重要环节,指的是在不改变软件外在行为的前提下,对软件内部结构进行调整以提高其可理解性、可维护性和可扩展性的过程。以下是一些常见的软件重构实践: 软件重构(Refactoring)是软件开发过程中的一个重要环节,指的是在不改变软件外在行为的前提下,对软件内部结构进行调整以提高其可理解性、可维护性和可扩展性的过程。软件重构是一个持续的过程,需要开发者具备良好的编程习惯和对代码质量的持续关注。2. 模块化:将大的代码块分解成小的、可管理的模块或函数,每个模块或函数负责单一的功能。13. 文档更新:随着代码的重构,更新相关的文档,确保文档与代码的一致性。5. 抽象化:将通用的代码抽象成更高层次的组件,减少代码的复杂性。 阅读详情

相关推荐

全面掌握大规模软件重用与系统重构技术

本文还有配套的精品资源,点击获取 简介:本课件深入解析大规模软件重用和系统重构在软件开发中的作用,包括提升开发效率、降低维护成本和保证软件质量。通过学习函数库、类库、框架等重用形式,理解模块化和解耦的系统架构。掌握系统重构技术,如提取方法、引入参数对象等,以及如何将重构与代码重用相结合,提高软件系统的可读性、可维护性和可扩展性。通过案例分析和实践练习,将理论知识应用于实际项...

weixin_32047493的博客 1860

program smart

1,可维护(Maintenance),被修改的能力。包括纠错,改进,新需求或功能规格变化的适应能力。 1)模块:高内聚,低耦合 2)处理流程和数据解耦 3)抽象:提取共同特征&流程,剥离易变部分 4)接口设计:原子化,不暴露内部数据和实现 5)组件&服务:自治,自组织,独立演进 2,简洁(Simple),易于理解,易于实现 1)圈复杂度 2)注释:w...

anjuenz87013的博客 399

利用LDA进行主题建模,用困惑度和一致性曲线选取最优主题数

如果困惑度和一致性曲线效果图较好,确定了主题数量后,再单独跑一下2里面的程序。2中topic为5是我主观设置的,不一定为最优。

m0_56327159的博客 4223

谈谈软件系统重构

系统重构总结经验分享

qq_30035133的博客 2959

从零构建MAVLink通信:PX4飞控与QGC的协议握手全解析

本文详细解析了PX4飞控与QGC地面站通过MAVLink协议进行通信的全过程,重点介绍了航点传输协议的状态机设计、INT类型消息的优化优势以及异常处理与调试技巧。通过实战案例和性能优化建议,帮助开发者高效构建无人机通信系统,提升数据传输效率与稳定性。

weixin_29209805的博客 504

LVGL在STM32H743IIT6上的性能优化技巧:如何提升图形界面刷新速度

本文详细介绍了在STM32H743IIT6高性能MCU上优化LVGL图形界面刷新速度的实战技巧。通过利用芯片的DMA2D硬件加速模块替代低效的软件画点,将绘制缓冲区放入SDRAM并启用双缓冲机制,以及合理配置CPU缓存与MPU,有效解决了界面卡顿问题。文章还涵盖了LVGL引擎调优、内存架构优化等关键步骤,帮助开发者充分发挥STM32H743的硬件潜力,实现流畅的图形界面体验。

vscode6remote的博客 306

软件重构方法

内联方法可以避免一些不必要的方法调用,尤其是在一个方法只有很少的代码行数时,如果不内联这个方法,每次调用都需要发生一次方法调用的开销,这样会影响程序的性能。内联方法(Inline Method)是一种重构手段,它的目的是将一个方法的所有代码直接替换到调用它的地方,以减少方法调用的开销和提高代码的可读性。提炼类是指将一个类中的一部分功能提取出来,形成一个新的类,以减少原来类的职责,提高代码的可维护性和可读性。4.合并重复代码:将代码中重复出现的部分合并起来,形成一个共用的方法或类,以避免代码的冗余。

liulanba的博客 7345

OpenCV实战:5分钟搞定图像拼接(附Python代码)

本文通过OpenCV实战教程,详细讲解如何使用Python在5分钟内完成图像拼接。重点介绍`findHomography`函数和单应性矩阵的应用,提供完整的代码示例和常见问题解决方案,帮助开发者快速掌握图像拼接技术。

weixin_26833503的博客 120

软件设计与重构的六个原则

软件设计与重构的六个原则 再读《重构》和《架构整洁之道》 目录 开放封闭原则 --- OCP 依赖倒置原则 --- DIP 单一职责原则 --- SRP Liskov替换原则 --- LSP 接口隔离原则 -- ISP 迪米特法则(最小知识原则) -- LOD 一、开放封闭原则 --- OCP 软件中的基础结构(函数、类或模块)对于功能扩展是开放的,但是对于修改是封闭的。 可实施的具体行...

danxibaoxxx的博客 4306

ai数字人系统部署

这段代码实现了基本的语音交互闭环,用户通过语音输入问题,数字人识别语音后进行自然语言理解并生成回复,再将回复转换为语音输出。但实际应用中的 AI 数字人系统更为复杂,如形象渲染需专业图形引擎(如 Unity、Unreal Engine),自然语言处理也会涉及更复杂的模型微调及多轮对话管理等。一个完整的 AI 数字人系统涵盖形象生成、自然语言处理、动作控制等多个复杂功能,下面为你提供一个 Python 示例,整合多个库来实现数字人基础功能,包括语音交互、简单的自然语言理解以及通过虚拟形象展示对话。

weixin_ggwwsscc的博客 369

AD21导出gerber文件

文件–>制造输出–>Gerber Files 文件–>制造输出–>Gerber Files 通用、光圈和高级跟第一步一样 3.文件–>制造输出–>NC Drill Files 这个默认就可以了 主要参考视频来自bilibili添加链接描述 此篇博客主要是写给自己好记的,无其他商业用途 ...

新手小杨 1万+

软件设计核心:SOLID原则与重构实战指南

软件设计能力决定代码能否在需求变化中保持可读、可扩展与可维护。从命名到模块架构,设计的每个层次都影响最终维护成本,而SOLID原则与设计模式正是支撑良好设计的核心工具。掌握这些原理,不仅能减少if/else分支蔓延,还能提升单元测试的可行性。在AI辅助编码日趋普遍的今天,设计判断力反而成为区分代码质量的关键。本文通过订单折扣系统的完整重构案例,展示如何将坏味道代码优化为策略模式驱动的可扩展结构,并探讨分层架构、防腐层等工程实践,为开发者提供一套可落地的设计改进路径。

weixin_30702441的博客 239

使用rknn进行facenet部署

修改facenet网络的forward函数代码。

如果想成为中心,那么就到中心去吧。 1044

软件开发中独特重构手法的三大核心原则与实践

代码重构是提升软件质量的关键技术,其本质是在不改变外部行为的前提下优化内部结构。通过AST解析、CQRS模式等核心技术,重构能够有效降低系统复杂度并提升性能。在微服务架构和前端现代化改造等场景中,独特的重构手法如渐进式改良和技术组合创新展现出显著价值。特别是在电商库存优化和Node.js微服务改造等案例中,上下文敏感的重构策略使查询性能提升200倍,审查效率提高6倍。这些实践验证了重构在降低技术债务、加速业务响应方面的工程价值,为团队提供了可复用的模式创新工具箱和风险控制方法论。

weixin_30768881的博客 258

【AI编程】Trae 环境搭建与配置从使用到项目实战详解

Trae 环境搭建与配置从使用到项目实战详解

congge 5650

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

【敏捷软件开发:原则、模式与实践】之代码重构

一 概念         在Martin Fowler的名著《重构》中,他把重构定义为:在不改变代码外在行为的前提下对代码进行修改,以改进代码的内部结构的过程。      代码实现了需求,但是代码却不精炼,冗余,结构混乱,难读懂,难维护,难扩展等等。与之相对应的一个词是"refactor",即代码重构。我们在看些外国人写的程序时可以发现,他们的代码里一般会定义大量的类、接口、方法,类与类,

三棵石头的博客 821

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

《重构 改善既有代码的设计》之重构原则

1 简介 过年回家了,在家里已经呆了两天,两天里陪父母烧锅,教他们使用红米手机,聊天,吃饭。家里很好,只是父母年纪又大了一岁,很心疼它们,听他们讲年后还要出去打工挣钱,不知道说什么,觉得很对不起他们。我真的是太没用了。父亲总是吸烟,烟瘾很重,一晚上要吸很多根,我很担心,但总是劝不停。两天没有总结这本刚看完的《重构》了,所以今晚上,虽然很冷,还是坐在椅子边上认真的敲一些字,总结一下吧。 重构 改善既...

不当初 2165

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

敏捷软件开发:原则、模式与实践——第5章 重构

第5章 重构   在Martin Fowler的名著《重构》一书中,他把重构定义为:“在不改变代码外在行为的前提下对对代码做出修改,以改进代码内部结构的过程。”可是我们为什么要改进已经能够工作的代码结构呢?我们不是都知道“如果它没有坏,就不要去修理它!”吗?   每一个软件模块都有3项职责。第一个职责是它运行起来所完成的功能。这也是该模块得以存在的原因。第二个职责是它要应对的变化。几乎所有的模...

weixin_30457465的博客 237

读书笔记:重构原则

在第一章作者用一个例子让我们感受重构,在第二章中作者着重讲了一下重构的关键原则, 和重构时应该考虑的问题。 2.1 何谓重构 重构名词定义:对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高 其可理解性,降低其修改成本。 重构动词定义:使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。 扩展的两个点:1. ...

weixin_30341735的博客 104

对《敏捷软件开发:原则、模式与实践》中保龄球程序重构的一些思考

前几天看了《敏捷软件开发:原则、模式与实践》中第六章:一次编程实战,文章中主要描述了一对开发人员进行一次记录保龄球比赛成绩程序的开发过程.仔细研究之后,发现一个问题,拿出来和大家讨论讨论.(有兴趣的同学可以先看一看书中第六章的内容) 简单来说,该程序是用来计算保龄球比赛分数的,程序计算分数的功能不多说了.这里主要关注程序判断"当前在第几轮"(currentFrame)这一变量上. ...

weixin_30877181的博客 264

敏捷软件开发原则,模式与实践(c#)读书笔记(1)-重构

1.什么是重构 在不改变代码外在行为的前提下对代码进行修改,以改变代码内部结构过程。 2.每一个软件模块的3项职责: 1.完成功能 2.应对变化 3.能够使阅读者理解。 转载于:https://www.cnblogs.com/wxf82610/archive/2009/02/20/1394605.html...

weixin_34248849的博客 90

《敏捷软件开发-原则、模式与实践》-第五章 重构

    本章的主要讲的是重构,但是仅仅给出了一个重构的例子以及简略说明了一些重构的方法。重构的知识我认为对于开发人员还是很有必要去单独去找一本书仔细去学习的。这里只大略讲一下本章中提到的一些知识点。    本章站在第一视角,对一个素数产生的程序进行了重构。看到书中最原始的程序版本,我不禁冒出了一句:“什么鬼?!”。程序中竟然还有变量的名字为s,f这种完全没有意义的东西,甚至是一个函数写到了底。接下...

weixin_29520137的博客 251

软件重构与设计模式

软件重构是指在不改变软件功能和外部可见性的情况下,为了改善软件的结构,提高清晰性、可扩展性和可重用性而对软件进行的改造。简而言之,重构就是改进已经写好的软件的设计。在敏捷开发方法学中,重构常常是软件开发循环的一部分,开发者通过增加新的测试和功能,或者重构代码来改善内部的一致性和清晰性。重构也是代码维护中的一部分,既不修正错误,又不增加新的功能性,而是用于提高代码的可读性或者改变代码的结构和设计,使

中科院计算所培训中心 1083

【重构】一、重构的原则

重构的原则 文章目录重构的原则0什么是重构两顶帽子为什么要重构重构改进软件的设计重构使软件更容易理解重构能帮助找到bug重构提高编程速度什么时候重构预备性重构:让添加新功能更容易帮助理解的重构:使代码更容易懂捡垃圾式重构有计划地重构和见机行事的重构长期重构复审代码时重构怎么对leader说何时不应该重构重构的挑战 0 这个系列是《重构——改善既有代码的设计(第2版)》的读书笔记,没错就是不久前20...

CL有毒 1530

《重构,改善代码的既有设计》02-重构的原则

02重构的原则 2.1何为重构 重构的定义 使用一系列的手法,对软件内部结构的一种调整,目的是: 在不改变软件可观察行为的前提下, 提高可理解性, 减低修改成本(时间成本、人力成本、质量成本); 重构的关键 运用大量微小且保持软件行为的步骤,一步步达成大规模的修改; 重构过程中,每一步改动后软件保持可用状态; 重构和优化的对比 ***相同点*** 都需要修改代码; 都不会改变程序的整...

baidu_41871113的博客 576

《重构:改善既有代码的设计》读书笔记(一)

各位程序老司机对重构肯定不会陌生,程序员的工作离不开重构。那么重构是已经“飞入寻常百姓家”的普通技术能力,还是看起来高大上的杀器? 对于一项技术你并不是天生就会而是需要持续学习的,很多人对重构的认识停留在 DevTools 自带的 Refactor 工具和搜索引擎出来的几篇文章,但是这样得到的知识并不够完善和系统。所以当指点江山、慷慨激昂的重...

cpongo5 503
上一篇: [算法]【刷题笔记】链表专题
下一篇: 对基本类型-整型数据结构的认识
huahua.Dr
博客等级 码龄8年 87粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值