重构一个快不可维护的项目

2023-05-16

历史原因,接手了一个一直堆业务逻辑,没有重构过的项目,简单看了一下代码就感觉麻头皮,满目都是一个方法里面大段的代码,阅读起来极度困难,可以合并的类没有合并,导致一个请求回调之后需要发送4个Event,这些都让我感觉重构迫在眉睫。

首先我将重构分为代码质量的重构和业务逻辑的重构,因为业务迭代还在继续,这时候进行大量的业务逻辑重构,肯定为影响业务进度,所以我第一步的工作重点就是代码质量的重构。

  1. 代码规范

    项目中有很多命名不规范,随便换行,递进,空格,这些小的点,虽然不影响功能,但是很影响阅读,这里为什么强调代码阅读性的重要,这还是我刚到饿了么的时候,思敏大哥和我强调的,好的代码,只需要看一下类名方法名,就应该知道这个类的作用,这样的好处了是增加了可维护性,很多功能,过了一阶段,自己回头看的时候,可以轻松的了解整个代码的功能,而不需要一行一行的看代码,更何况很多情况都是其他人来阅读你的代码.

  2. 解耦

    这里写图片描述

    这张图把解耦解析的淋漓尽致,子系统、子模块的职责划分。把内在关联密切的功能/实现放在一个模块中,最小化暴露给外部的细节和依赖,是为“高内聚、低耦合”。我们的项目中有很多的工具类中依赖这外部的各种条件,变量,比如说网络请求模块,他的Header头HeaderInterceptor中依赖大量的本地管理类提供数据,平时用的时候没有感觉出问题,但是当我想在另一个子模块想使用网络请求的时候,发现没有环境去获取本地管理数据,他根本运行不了,所以这个时候,我将HeaderInterceptor作为对外接口,让实现网络请求的模块自己去实现HeaderInterceptor然后传进去,这样就完美的解决了网络请求和本地数据的耦合。解耦的自由,可以放心的整体替换模块,这个网络请求库使用不爽,我再换一个,我对外暴露的接口和回调是相同的,快捷拔插,方便的一逼。

  3. 函数拆分

        函数应该做一件事。做好一件事。只做这一件事。  
    

一个100行的函数,让人感到绝望,我们的项目中真有这样的big function,我花了20分钟才看懂它的作用,其中各种细节,估计现在让作者来解释也需要再看半天。如果一个方法是功能是将请求的数据进行分组=A,然后显示listview=B,再然后隐藏原来的空白布局=C。那么就应该把这3个功能写3个方法,这样在请求的回调里面很清晰的看到

{
A; //数据进行分组
B; //显示listview
C; //隐藏原来的空白布局
}

每个方法只做一件事,除了阅读的方便,还有个好处就是复用,如果你重复的写相同的逻辑,这个时候,你就应该把相同的逻辑抽出来,放大点说,github上的各种库就是这样的轮子。

不过不得不说,重构别人的代码是痛苦的,尤其是看到那些蠢萌的方法,简直想哭。强迫症也是在重构过程中养成的,改完了的代码,让我感觉舒服,放心,满足,一个码农的快乐和骄傲,莫过于此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

重构一个快不可维护的项目 的相关文章

随机推荐

  • OpenCV学习笔记1

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 参考 OpenCV 浅墨 专栏 读入 xff0c 显示 xff0c 保存图像 include lt opencv2 core
  • Error: Could not find or load main class org.apache.hadoop.fs.FsShell

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 错误 xff1a Error Could not find or load main class org apache had
  • centos 6.x安装squid

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 不设置用户认证 安装 安装 yum install squid yum install httpd 查看版本 rpm qa g
  • VMware清理vmdk文件,解决vmdk越来越大的问题

    目录 压缩 vmdk方法在虚拟机上操作在主机上操作 参考链接 问题 xff1a 主机是Windwos xff0c 安装了VMWare 在VMWare中安装了虚拟机Ubuntu操作系统 Ubuntu本身不大 xff0c 但是 vmdk很大 网
  • 安全-认证授权、数据脱敏

    一 认证授权 JWT xff1a JWT xff08 JSON Web Token xff09 是一种身份认证的方式 xff0c JWT 本质上就一段签名的 JSON 格式的数据 由于它是带有签名的 xff0c 因此接收者便可以验证它的真实
  • 树莓派4b 串口通信实现自发自收

    1 树莓派串口映射设置 运行以下命令 xff1a ls dev al 出现串口映射的情况 xff0c 但是此时是在默认状态下 xff0c serial0 就是GPIO14 15 是映射到ttyS0的 xff0c serial1 xff08
  • 按要求编写一个Java应用程序程序: (1)定义一个接口CanFly,描述会飞的方法public void fly(); (2)分别定义类飞机和鸟,实现CanFly接

    代码 第三题 xff1a 按要求编写一个Java应用程序程序 xff1a xff08 1 xff09 定义一个接口CanFly xff0c 描述会飞的方法public void fly xff08 2 xff09 分别定义类飞机和鸟 xff
  • plc热电偶模块模拟量数据波动原因

    要找到模拟数据波动的根本原因 可能是以下原因 您可能使用了自供电或隔离的传感器电源 xff0c 并且两个电源没有相互连接 xff0c 即模拟输入模块的电源接地和传感器的信号接地没有连接 这会产生上下振动的高共模电压 xff0c 从而影响模拟
  • C #Winform窗体自适应

    说明 xff1a Winform让窗体内的控件随着窗体的大小而改变 xff0c 而且能让指定的控件始终处于居中位置 封装成类 xff0c 直接拷贝过去即可 一 类源码如下 xff1a using System using System Co
  • Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)解决方案

    docker service Docker Application Container Engine Loaded loaded usr lib systemd system docker service enabled vendor pr
  • emWin - Movie篇

    STemWin版本 xff1a 544 xff08 ST购买了emWin的license xff0c 可以在ST芯片中使用emWin工具包 xff0c 就叫STemWin xff09 emWin开发工具包可以转换JPG BMP GIF等各种
  • 大规模集群故障处理

    我相信每一个集群管理员 xff0c 在长期管理多个不同体量及应用场景的集群后 xff0c 都会多少产生情绪 其实这在我看来 xff0c 是一个很微妙的事 xff0c 即大家也已经开始人性化的看待每一个集群了 既然是人性化的管理集群 xff0
  • ADRC调试经验(已调通)

    自抗扰控制的组成 有关自抗扰的相关内容 xff0c 韩老师在他的一系列论文中已经描绘的非常清晰了 xff0c 具体资料可以点击这里下载 其中对于TD和ESO这两个部分其实是比较好调节的 xff0c 很容易就能够获得很好的效果 比较难调节的参
  • 浏览器的同源策略

    https developer mozilla org zh CN docs Web Security Same origin policy 这篇翻译不完整 请帮忙从英语翻译这篇文章 同源策略限制了从同一个源加载的文档或脚本如何与来自另一个
  • centos简单解决报错-bash 未找到命令

    centos报错 bash 未找到命令 在使用纯净镜像的时候 经常找不到一些额外的命令 想用但是不知道怎么安装 拿telnet 和netstat 举例 telnet yum provides telnet 这里只需要 yum y span
  • [问题已处理]-docker build出来的镜像没有更新成功

    导语 xff1a 记录一下docker build镜像的坑 如果修改代码文件的话 xff0c docker build 有时候会不替换文件 xff0c 而会使用cache xff0c 导致代码文件没有更新 第一次构建镜像 产生了cache
  • [问题已处理]在docker中使用nohup

    导语 xff1a docker运行容器是否能使用nohup 以下是测试在不同的情况下使用nohup 先启动一个容器 仅看进程的pid号参考 docker run it rm ubuntu 16 04 bash sleep 5 amp amp
  • k8s-集群搭建的三种方式和区别,kubeadm、minikube,二进制包

    k8s 集群搭建的三种方式 xff0c 目前主流的搭建k8s集群的方式有kubeadm minikube xff0c 二进制包 kubeadm 是一个工具 xff0c 用于快速搭建kubernetes集群 xff0c 目前应该是比较方便和推
  • 精确算法、启发式算法、元启发式算法及增长方式浅析

    组合优化问题是通过用数学方法的研究去寻找离散事件的最优编排 分组 次序或筛选等 xff0c 其变量是离散分布的 对于结构化的组合优化问题 xff0c 其解空间的规模能够得到控制 xff0c 对于这样的问题 xff0c 使用精确算法就可以求得
  • 重构一个快不可维护的项目

    历史原因 xff0c 接手了一个一直堆业务逻辑 xff0c 没有重构过的项目 xff0c 简单看了一下代码就感觉麻头皮 xff0c 满目都是一个方法里面大段的代码 xff0c 阅读起来极度困难 可以合并的类没有合并 xff0c 导致一个请求