当前位置: 首页 > news >正文

代码坏味道与重构之霰弹式修改和依恋情结

文章目录

    • 1. 霰弹式修改
    • 2. 依恋情结

1. 霰弹式修改

定义:指每遇到某种变化,你都必须在许多不同的类内做出许多小修改。

影响:需要修改的代码散落各处,难以找到他们,容易修改遗漏。

重构目标:代码结构更加清晰,减少代码重复,提升可维护性。

重构方法

  • 搬移函数
  • 搬移字段
  • 函数组合成类
  • 函数组合成变换
  • 拆分阶段
  • 内联函数
  • 内联类

常见特点

  • 某些类似或者关联操作存在多个类或方法中

重构中可能用到的快捷键操作

操作快捷键
提炼常量Ctrl + Alt + C
提炼函数Ctrl + Alt + M
搬移实例方法/静态成员F6
内联Ctrl + Alt + N

2. 依恋情结

定义:一个函数跟另一个模块中的函数或数据交互格外频繁,远胜于在自己所处模块内部的交流。

影响:可读性和可维护性。调用另一个模块功能时需要做很多操作才能完成,需要知道更多的细节。

重构目标:类要更加内聚,将函数搬移到对应的类,解除跨模块的过多交流。

重构方法

  • 提炼函数
  • 搬移函数

常见特点

  • 在一个函数中对另一个对象有频繁的组合调用,对自身的访问却偏少。

重构中可能用到的快捷键操作

操作快捷键
提炼常量Ctrl + Alt + C
提炼函数Ctrl + Alt + M

PS:仅用于学习交流。

相关文章:

  • 【web-渗透测试方法】(15.6)测试基于输入的漏洞
  • Java高频面试题【基础篇】
  • meta理解及使用
  • 论语第二篇-为政
  • 50个例子学Python(一)
  • leetcode竞赛:20220904周赛
  • 算法小讲堂之B树和B+树(浅谈)|考研笔记
  • 【02】Camunda系列-扩展案例-用户任务、网关、决策自动化
  • J. Counting Trees (树,卡特兰数)
  • 77-Java的Set系列集合、Collection体系的总结
  • this指哪去了
  • 算法----二维区域和检索 - 矩阵不可变(Kotlin)
  • 向Visual Studio Code导入ST项目
  • ES6转为ES5 AST
  • 二分法查找方法
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 《深入 React 技术栈》
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • CAP理论的例子讲解
  • CSS 专业技巧
  • css选择器
  • Flannel解读
  • flask接收请求并推入栈
  • Node + FFmpeg 实现Canvas动画导出视频
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • PV统计优化设计
  • SpiderData 2019年2月23日 DApp数据排行榜
  • underscore源码剖析之整体架构
  • 闭包,sync使用细节
  • 不上全站https的网站你们就等着被恶心死吧
  • 从输入URL到页面加载发生了什么
  • 那些年我们用过的显示性能指标
  • 如何使用 OAuth 2.0 将 LinkedIn 集成入 iOS 应用
  • 适配mpvue平台的的微信小程序日历组件mpvue-calendar
  • 用简单代码看卷积组块发展
  • 1.Ext JS 建立web开发工程
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
  • ​用户画像从0到100的构建思路
  • !$boo在php中什么意思,php前戏
  • (02)vite环境变量配置
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (4)logging(日志模块)
  • (附程序)AD采集中的10种经典软件滤波程序优缺点分析
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (剑指Offer)面试题34:丑数
  • (一)认识微服务
  • (原創) 是否该学PetShop将Model和BLL分开? (.NET) (N-Tier) (PetShop) (OO)
  • (转)【Hibernate总结系列】使用举例
  • (转)为C# Windows服务添加安装程序
  • .NET 读取 JSON格式的数据
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NET构架之我见
  • .NET序列化 serializable,反序列化