李锋镝的博客

  • 首页
  • 时间轴
  • 留言
  • 插件
  • 左邻右舍
  • 关于我
    • 关于我
    • 另一个网站
  • 知识库
  • 赞助
Destiny
自是人生长恨水长东
  1. 首页
  2. 原创
  3. 正文

何谓重构?为何重构?

2019年6月24日 19681点热度 0人点赞 0条评论

什么是重构?

所谓重构是这样一个过程:在不改变代码外在行为的前提下,对代码做出修改,以改进程序的内部结构。
——引用自《重构:改善既有的代码设计》

重构(名词)

对软件内部结构的一种调整,目的是在不改变软件可观察行为的前提下,提高其可理解性,降低其修改成本。

重构(动词)

使用一系列重构手法,在不改变软件可观察行为的前提下,调整其结构。

为什么需要重构?

项目经过不断的迭代、修改、升级...基于原先的设计所得到的系统,整体结构逐渐衰弱,代码质量不断降低,代码的可读性、弹性越来越差,冗余代码越来越多,导致新的需求只能胡乱拼凑上去...再加上公司内部的人员调整,陈年代码无人能懂更不敢随意优化(稍不注意就会导致意想不到的灾难发生)。
这样导致的结果就是代码质量、项目性能慢慢下降,程序的设计逐渐腐败变质,本来严谨的编码工作逐渐变成胡乱拼凑的随性行为(只要完成了现有功能,不影响老的功能就万事大吉了!——这应该是大部分在陈年代码的基础上编程的工程师的真是想法)。

通过重构我们能得到什么?

1.重构能够改进软件设计

代码结构的流失是累积性的。越难看出代码的设计意图,就越难保护其中的设计,于是该设计就腐败的越快。而经常性的重构可以帮助代码维持自己的形态和结构。

完成同样一件事,设计不良的程序往往需要更改代码,这通常是因为相同的代码在不同的地方做着同样的事。如果消除重复代码,你就可以确定所有的事物、行为在代码中只表述一次,这正是优秀设计的根本。

2.重构使软件更容易理解

重构会使代码渐趋简洁,越简洁就越容易理解,越容易理解就越容易修改...

3.重构能够找到代码中隐藏的bug

对代码进行重构,可以更深入的理解代码,搞清楚程序的结构,于是bug就被揪出来了。

重构能够帮助程序员更有效的写出更强健的代码。

4.重构提高编程速度

良好的设计是开发的根本,拥有良好的设计才可能做到快速开发。如果没有良好的设计,或许短时间内进展迅速,但是恶劣的设计很快就让你的速度慢下来。你会花费大量的时间进行调试,添加新功能难度越来越高,修改时间越来越长,bug越藏越深,为了解决问题于是一个又一个补丁出现...哦~真是一个恶性循环。

重构可以帮助你更快的开发软件,因为它阻止系统腐败变质,它甚至还可以提高设计质量。

何时重构:见何时重构?

 

除非注明,否则均为李锋镝的博客原创文章,转载必须以链接形式标明本文链接

本文链接:https://www.lifengdi.com/archives/article/275

相关文章

  • 何时重构?
  • SpringBoot常用注解
  • CompletableFuture使用详解
  • 金融级JVM深度调优实战的经验和技巧
  • SpringBoot 中内置的 49 个常用工具类
本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可
标签: JAVA 重构
最后更新:2019年6月26日

李锋镝

既然选择了远方,便只顾风雨兼程。

打赏 点赞
< 上一篇
下一篇 >

文章评论

1 2 3 4 5 6 7 8 9 11 12 13 14 15 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 46 47 48 49 50 51 52 53 54 55 57 58 60 61 62 63 64 65 66 67 69 72 74 76 77 78 79 80 81 82 85 86 87 90 92 93 94 95 96 97 98 99
取消回复

了却君王天下事,赢得生前身后名。

最新 热点 随机
最新 热点 随机
SpringBoot框架自动配置之spring.factories和AutoConfiguration.imports 应用型负载均衡(ALB)和网络型负载均衡(NLB)区别 什么是Helm? TransmittableThreadLocal介绍与使用 ReentrantLock深度解析 RedisTemplate和Redisson的区别
玩博客的人是不是越来越少了?准备入手个亚太的ECS,友友们有什么建议吗?什么是Helm?2024年11月1号 农历十月初一别再背线程池的七大参数了,现在面试官都这么问URL地址末尾加不加“/”有什么区别
IDEA下载源码报:Cannot connect to the Maven process. Try again later. MDC介绍 SpringBoot使用RestTemplate进行接口调用 jstat命令使用(JDK1.8) SVN服务端和客户端的安装以及在MyEclipse中的配置 记录一次K8s 部署 Sentinel Dashboard 无法通过 Metric 抓取数据问题
标签聚合
Redis 面试 SQL JAVA MySQL JVM docker 数据库 教程 SpringBoot K8s 分布式 IDEA 文学 架构 多线程 Spring 日常 设计模式 ElasticSearch
友情链接
  • i架构
  • 临窗旋墨
  • 博友圈
  • 博客录
  • 博客星球
  • 哥斯拉
  • 志文工作室
  • 搬砖日记
  • 旋律的博客
  • 旧时繁华
  • 林羽凡
  • 知向前端
  • 蜗牛工作室
  • 集博栈
  • 韩小韩博客
  • 風の声音

COPYRIGHT © 2025 lifengdi.com. ALL RIGHTS RESERVED.

Theme Kratos Made By Dylan

津ICP备2024022503号-3