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

【项目重构】第1次思考

回顾与反思

2022年~至今(2023年2月),一共重构了2个项目。

第1个项目在重构的时候,总是想着把别人的代码copy过来,改一改,这就算重构好了。这样做效率太低,原因是前人写的代码不一定有很多注释,有注释有可能写的也不清楚。还有一点比较重要的是,自己写的思路可能和前人不太一样,那么直接改他的代码就需要先看懂他的代码思路,这个过程是很花时间的。

第2个项目在重构的时候,还没有完全摸清楚项目整体架构,就直接动手开始写了。这样做也存在很多问题,比如写的过程中由于有的细节没有搞清楚,会出现写到这里的时候发现和前面的结构、逻辑不太一样,又重新改动,又或者是输入、输出、数据结构不统一等问题。

总结下来,自己的问题包括:

  1. 先从别人的代码入手,改别人的代码进行重构
  2. 没有完全弄清楚项目架构就开始重构

这些也是今后需要改进的地方。

改进方向

  1. 项目对接:首先最好要和项目前一个负责人对接好,搞清楚项目整体的框架。记住是只抓架构,切忌抠细节。这一部分要花大量时间,一定要耐住性子,搞清楚项目架构的每一步的作用,输入输出是什么。
  2. 开始重构:弄清架构后,就可以开始重构了。重构可以按如下步骤进行:
    (1)先按架构搭建好整体流程,每一步用函数代替,函数体暂时空缺出来。在这个过程中,可能会有发现自己对项目的理解和原项目有一定的出入,比如每一步的作用、每一步的输入输出、每一步的输入输出的顺序等。这个时候要及时和前负责人讨论,证明自己的理解或者证伪自己的理解,然后完善理解,对流程反复做出调整,最后形成一个正确的框架。
    (2)搭建好框架之后,再针对每个函数逐步实现细节。这个时候就可以参考,甚至是直接copy前负责人写的代码。

重构给我带来的思考

(重构让我知道代码写的不好维护看起来真的脑壳痛。。)

根据我个人的习惯,我觉得在写代码的时候可以从以下几点去注意:

  • 函数参数不能太多,最多只能有3、4个
  • 一行代码最好就是一个功能,多利用函数式编程,这样在调试的时候只需要注释一样,很方便
  • 避免过多的嵌套,嵌套层数不要超过3层,可以利用抽离函数、return等方式减少嵌套次数
  • 写的时候一定要边写边测试,测试的部分最好是一个最小单元

相关文章:

【项目重构】第1次思考

回顾与反思 2022年~至今(2023年2月),一共重构了2个项目。 第1个项目在重构的时候,总是想着把别人的代码copy过来,改一改,这就算重构好了。这样做效率太低,原因是前人写的代码不一定有很多注释…...

Java:SpringMVC的使用(2)

目录第十二章 REST风格CRUD练习12.1 搭建环境12.2 实现功能思路第十三章 SpringMVC消息转换器13.1 消息转换器概述13.2 使用消息转换器处理请求报文(1) 使用RequestBody获取请求体(2) 使用HttpEntity\<T>获取请求体及请求头13.3 使用消息转换器处理响应报文(1) 使用Respo…...

Elasticsearch7.8.0版本进阶——分布式集群(应对故障)

目录一、Elasticsearch集群的安装1.1、Elasticsearch集群的安装&#xff08;win10环境&#xff09;1.2、Elasticsearch集群的安装&#xff08;linux环境&#xff09;二、应对故障&#xff08;win10环境集群演示&#xff09;2.1、启动集群&#xff08;三个节点&#xff09;2.2、…...

【LeetCode】每日一题(2)

目录 题目&#xff1a;1138. 字母板上的路径 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 写在最后&#xff1a; 题目&#xff1a;1138. 字母板上的路径 - 力扣&am…...

软件设计师教程(六)计算机系统知识-操作系统知识

软件设计师教程 软件设计师教程&#xff08;一&#xff09;计算机系统知识-计算机系统基础知识 软件设计师教程&#xff08;二&#xff09;计算机系统知识-计算机体系结构 软件设计师教程&#xff08;三&#xff09;计算机系统知识-计算机体系结构 软件设计师教程&#xff08;…...

Zookeeper下载安装与集群搭建

Zookeeper下载安装与集群搭建1.下载安装1.1 下载安装1.2 配置启动2.集群搭建2.1 搭建要求2.2 准备工作2.3 配置集群2.4 启动集群2.5 模拟集群异常1.下载安装 1.1 下载安装 1、环境准备 ZooKeeper服务器是用Java创建的&#xff0c;它运行在JVM之上。需要安装JDK 7或更高版本。…...

Filter防火墙(8)

实验目的 1、了解个人防火墙的基本工作原理&#xff1b; 2、掌握Filter防火墙的配置。 预备知识防火墙 防火墙&#xff08;Firewall&#xff09;是一项协助确保信息安全的设备&#xff0c;会依照特定的规则&#xff0c;允许或是限制传输的数据通过。防火墙可以是一台专属的硬…...

Spring事务的传播级别——包你一文通

文章目录一、简单说明二、具体案例描述2.1.PROPAGATION_REQUIRED2.2.PROPAGATION_REQUIRED_NEW2.3.PROPAGATION_SUPPORTS2.4.PROPAGATION_NOT_SUPPORTED2.5.PROPAGATION_MANDATORY2.6.PROPAGATION_NEVER2.7.PROPAGATION_NESTED三、总结3.1、PROPAGATION_REQUIRED3.2、PROPAGATI…...

C语言(C预编译指令)

目录 1.undef 2.条件编译#ifdef,#else和#endif 3.#ifndef 4.#if和#elif 5.预定义宏 6.#line和#error 7.#pragma 1.undef #undef指令用于取消已定义的#define指令 #define LIMIT 400 #undef LIMIT 如果想使用一个名称但又不确定之前是否已经用过&#xff0c;为了安全起…...

JMeter 接口测试/并发测试/性能测试

Jmter工具设计之初是用于做性能测试的&#xff0c;它在实现对各种接口的调用方面已经做的比较成熟&#xff0c;因此&#xff0c;本次直接使用Jmeter工具来完成对Http接口的测试。因为再做接口测试时可以设置线程组&#xff0c;所以也可做接口性能测试。本篇使用JMeter完成了一个…...

大家心心念念的RocketMQ5.x入门手册来喽

1、前言 为了更好的拥抱云原生&#xff0c;RocketMQ5.x架构进行了大的重构&#xff0c;提出了存储与计算分离的设计架构&#xff0c;架构设计图如下所示&#xff1a; RocketMQ5.x提供了一套非常建议的消息发送、消费API&#xff0c;并统一放在Apache顶级开源项目rocketmq-clie…...

(考研湖科大教书匠计算机网络)第四章网络层-第三节1:IPv4地址概述

获取pdf&#xff1a;密码7281专栏目录首页&#xff1a;【专栏必读】考研湖科大教书匠计算机网络笔记导航 文章目录一&#xff1a;IPv4地址概述二&#xff1a;IPv4地址表示方法&#xff08;1&#xff09;概述&#xff08;2&#xff09;8位无符号二进制数转十进制正整数&#xff…...

B站Python与OpenCV人脸识别项目超详细记录(对图片、视频、摄像头人脸的检测)

课程来源&#xff1a;一天搞定人脸识别项目&#xff01;学不会up直接下跪&#xff01;&#xff08;pythonopencv&#xff09;_哔哩哔哩_bilibili 图片来源&#xff1a;感谢王鹤棣先生友情出镜~ 环境配置详见&#xff1a; 在conda虚拟环境中安装OpenCv并在pycharm中使用_cond…...

【Node.js实战】一文带你开发博客项目之Koa2重构(实现session、开发路由、联调、日志)

个人简介 &#x1f440;个人主页&#xff1a; 前端杂货铺 &#x1f64b;‍♂️学习方向&#xff1a; 主攻前端方向&#xff0c;也会涉及到服务端 &#x1f4c3;个人状态&#xff1a; 在校大学生一枚&#xff0c;已拿多个前端 offer&#xff08;秋招&#xff09; &#x1f680;未…...

第一部分:简单句——第二章:简单句的补充

简单句的核心构成&#xff1a;一主一谓 主语/宾语/表语 可以变成名词/代词/doing/to do 谓语动词有四种核心变化&#xff1a;三态 一否 时态语态情态否定 简单句的核心&#xff1a;将简单句给写对 简单句的补充&#xff1a;将简单句给写的更好、更充分 简单句的补充 1、限定…...

Spring Security简介

前面我们已经完成了传智健康后台管理系统的部分功能&#xff0c;例如检查项管理、检查组管理、套餐管理、预 约设置等。接下来我们需要思考2个问题&#xff1a; 问题1&#xff1a;在生产环境下我们如果不登录后台系统就可以完成这些功能操作吗&#xff1f; 答案显然是否定的&am…...

Hadoop安装 --- 简易安装Hadoop

目录 1、使用xftp工具 在opt目录下创建install和soft文件 2、使用xftp工具 将压缩包上传到install文件 3、编写shell脚本 3.1、创建目录来放shell脚本 3.2、创建autoinsatll.sh文件并修改权限 3.3、编写autoinsatll.sh 文件 刷新资源 运行文件 格式化 启动所有进程 Ha…...

俞军产品方法论,消化吸收,要点整理

一、总体概括二、产品经理、价值、用户模型、交易模型三、价值、产品和企业的价值生存游戏的常见要点&#xff1a;企业做产品的4方面产出&#xff1a;四、决策五、俞军产品方法论&#xff0c;认知迭代史1&#xff09;俞军12条产品军规2)产品经理职级的背后影响因素&#xff1a;…...

spring注解的开端(@Component替代bean标签的使用)

目录 一、介绍 1.什么是注解开发&#xff1f; 2.Spring注解的版本 3.基于spring注解的应用 4. Component的细分注解 5.相关注解 二、简单例子讲解 1.类打注解 2.扫描注解放入工厂 3.总工厂取注解调用 4.运行结果 总结&#xff1a; 一、介绍 1.什么是注解开发&…...

Matlab傅里叶谱方法求解一维波动方程

傅里叶谱方法求解基本偏微分方程—一维波动方程 一维波动方程 对于一根两端固定、没有受到任何外力的弦, 若只研究其中的一段, 在不太长的时间 里, 固定端来不及对这段弦产生影响, 则可以认为固定端是不存在的, 弦的长度为无限大。 这种无界 (−∞<x<∞)(-\infty<x&…...

py3中 collections.Counter()函数典型例题

文章目录py3中 collections 的常用STL**Counter()** 函数**defaultdict()** 函数**deque()** 函数**orderedDict()** 函数&#xff08;缺例题&#xff09;小结py3中 collections 的常用STL 对于这个工具包非常好用&#xff0c;尤其是其中的 Counter() 函数 使用次数颇为频繁&a…...

Linux部署达梦数据库超详细教程

陈老老老板&#x1f9b8;&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;国产数据库-达梦数据库&#x1f468;‍&#x1f4bb;本文简述&#xff1a;本文讲一下达梦数据库的下载与安装教程&#xff08;Linux版&#xff09;&#xff0c;超级详细。&#x1f468;‍&#x1f4bb…...

ctfshow 每周大挑战 极限命令执行

《简单的命令执行题目》 这里感叹一下&#xff0c;g4佬是真好厉害&#xff0c;这次题目十分的难&#xff0c;嗯&#xff0c;对我这种菜鸡来说是这样的&#xff0c;想了一天&#xff0c;最后结束了&#xff0c;也还是没有想明白第五题的解法&#xff0c;我真是fw&#xff0c;到最…...

使用vue3,vite,less,flask,python从零开始学习硅谷外卖(16-40集)

严正声明&#xff01; 重要的事情说一遍&#xff0c;本文章仅供分享&#xff0c;文章和代码都是开源的&#xff0c;严禁以此牟利&#xff0c;严禁侵犯尚硅谷原作视频的任何权益&#xff0c;我知道学习编程的人各种各样的心思都有&#xff0c;但这不是你对开源社区侵权的理由&am…...

坚持就是胜利

很多朋友&#xff0c;可能坚持了多年的同等学力申硕考试&#xff0c;依然没有通过。如果你感到困惑&#xff0c;感到迷茫&#xff0c;要坚信&#xff1a;坚持就能胜利。有很多人跟你一样&#xff0c;一直坚持在路上&#xff0c;没有停止脚步。 生活没有你想象的那么好&#xff…...

代码中出现转置 pose (c2w,外参矩阵) 或者转置 intrinsic (内参)矩阵的原因

在代码中见到 pose&#xff08;c2w&#xff09;&#xff0c;intrinsic 矩阵的转置&#xff0c;觉得比较奇怪。 后来想了一下为什么。下面解释一下&#xff1a; 用 c2w 矩阵举例子。理论上&#xff0c;一个 c2w 左乘上 一个相机坐标系下的点 P的坐标&#xff0c;能够得到该点在…...

2023 年腾讯云服务器配置价格表出炉(2核2G/2核4G/4核8G/8核16G、16核32G)

腾讯云轻量应用服务器为轻量级的云服务器&#xff0c;使用门槛低&#xff0c;按套餐形式购买&#xff0c;轻量应用服务器套餐自带的公网带宽较大&#xff0c;4M、6M、7M、10M、14M及20M套餐可选&#xff0c;如果是云服务器CVM这个带宽价格就要贵很多了。 1、轻量应用服务器优惠…...

相机出图画面一半清晰,一半模糊的原因是什么?

1、问题背景&#xff1a;在做项目的过程中&#xff0c;有遇到过几次&#xff0c;出图后画面是一半清晰&#xff0c;一半模糊的现象&#xff0c;再重新对焦也是一样。但换了个镜头后就好了&#xff0c;这应该是镜头的质量问题&#xff0c;但导致镜头出现这种问题的具体原因是什么…...

Rust学习入门--【4】Rust 输出到命令行

Rust 语言中的打印“函数” 学习新的编程语言时&#xff0c;大家都喜欢打印“Hello World”。 在Rust中怎样将字符串打印出来呢&#xff1f; Rust 输出文字的方式主要有两种&#xff1a;println!() 和 print!()。 “函数”差异说明&#xff1a; 这两个"函数"都是向…...

Vector刷写方案—vFlash工具介绍

我是穿拖鞋的汉子,魔都中坚持长期主义的工科男! 今天魔都天气是连阴雨,滴滴答答的下个不停,心情也跟着潮湿起来!老规矩分享一段喜欢的文字,避免成为高知识低文化的工程师: 即使在真正的困境里,也一直提示自己,每次自恋不得超过十分钟! 那些看似无法度过得困境,不是…...

wordpress 微语/seo推广排名重要吗

A<-na.omit(A)A可以是vector(list),data frame或matrix。如果A是data frame或matrix&#xff0c;则同一行如果有一个NA&#xff0c;这一行都会被删除。转载于:https://blog.51cto.com/tao975/1391217...

西安建网站价格低/网络营销服务的内容

这里的移位寄存器不是简单的向左移位将串行输入转换为并行输出&#xff0c;而且要保留最后一个周期的输入数作为下一次输出的最高位&#xff0c;代码如下所示&#xff1a; module shift_reg(clk,rst,din,dout//,ordy);input clk;input rst;input [7:0] din;output [31:0] dout…...

wordpress 远程管理/2023引流软件

php 图片局部打马赛克 原理&#xff1a; 对图片中选定区域的每一像素&#xff0c;添加若干宽度及高度&#xff0c;生成矩型。而每一像素的矩型重叠在一起。就形成了马赛克效果。本例使用GD库的imagecolorat获取像素颜色&#xff0c;使用imagefilledrectangle画矩型。效果图&…...

做摘抄的网站/seo建站技术

推荐一波我写的任务管理软件(持续扩展完善) 主要功能可以每天规划任务,并查看今天还剩下多少秒,以及总完成率. CSDN下载:https://download.csdn.net/download/qq_41806966/12545118 需要源码可以去我的Github:https://github.com/1711680493/Application 里面的ShendiTaskM…...

提供网站哪家好/互联网平台推广

源代码下载地址&#xff1a;https://download.csdn.net/download/weixin_44893902/12839539 码云仓库地址&#xff1a; https://gitee.com/ynavc/WJX 演示地址&#xff1a;http://ynavc.gitee.io/wjx 演示连接&#xff1a;https://www.wulihub.com.cn/go/QowRNQ/index.html …...

大兴高端网站建设/下载百度2024最新版

效果图 image.png 提供的方法 和 属性 ref.show() // ref 主动调用显示打开ref.hide() // ref 主动调用隐藏关闭modalBoxHeight: 300, // 盒子高度modalBoxBg: #fff, // 盒子背景色hide: function () { }, // 关闭时的回调函数transparentIsClick: true // 透明区域是否可以点…...