关于重构工作的一点思考

author author     2022-09-07     288

关键词:

  最近两周一直忙着和重构相关的事情,本文将简要概述从开始制定重构方案,到具体执行的过程中遇到的问题,以及对重构的一点理性思考。

起因:

  本系统是2015年11月开始建设,当时为了快速投入使用,大量的烂代码,后期一直保持快速前进,没有进行过实质性的重构。

具体表现:

● 分层不清,sql哪都有,dao有、service也有,就差controller没写了。同样dao也包含业务逻辑。
● sql用的是spring jdbc,并没有使用mybatis,导致sql写起来有些复杂,封装不够基本都是原始sql。
● 习惯于用sql来解决业务问题,导致sql异常复杂,难于调试,拿着打印出来的sql也不容易找到哪出现的问题。基本上是一个业务一条sql,sql难于复用。
● 职责不清,没有边界可言,每个类想写什么就写什么,域模型完全没起到应有的作用。
● 代码逻辑复杂,坏味道的代码到处都是。如箭头型的代码逻辑复杂,层次特别深,最多的达到10层。

解决方案:

  本次重构作为第一期重构,主要解决域模型模糊,对部分类进行拆分合并,按照域模型进行模块划分。另外对于bad smell代码的提出一些常规的改进措施,可以参照《重构》一书这里不细说了。针对箭头型的代码主要采取卫语句模式进行重构。

遇到的问题:

  本次重构涉及面广,因此向领导申请到了三个人一周多的工作时间,产品人员答应给我们一周时间,不提新需求。可是刚工作一天,就来一个紧急需求,涉及到战略问题,重构自然就要让路了,搁置一周后重新打开。重新工作后又陆续插进来一些小需求,最终导致三周才完成重构工作。这还没完,重构改动面大,测试也要了很长的时间。测试期间必然要开发新的功能,这就导致新改的需求,与重构的代码有交集,要不断的将新需求代码合并到重构分支上去,这就不得不面对代码冲突问题,对测试工作也带来的困扰。

积极的一面:

  本人是新来到此项目组,通过本次重构,让我更加了解系统的来龙去脉,也看到系统一些深层次的问题,如原有的业务逻辑设计本身存在的问题,为后续工作的开展奠定基础。

总结:

  本次的重构跨度将近一个月,将重构带来的收益都稀释掉了。我个人给本次重构定性为一次不成功的重构,但也谈不上失败,毕竟解决了实际问题,为后续开发提供了一规范性的指导。这阶段我在思考这背后的原因。大概包括:
● 重构涉及到的范围比较大,导致工时有些长
● 将一个小组全投入到重构中,抽不出人来解决其它需求了
● 没有能拦住业务部门的紧急需求,say no挺难的
  重构至关重要,今后还会继续,当然策略也要修改,主要是小步快跑,如每次只修改一个模块,两三天就可以搞定上线。另外对于重构来说最重要的还是在平时,如果发现某模块要重构,在工作的时候就要无情的进行重构,可以适当的多争取一些时间。抽取出大量的时间进行重构真的是下策了。

最近的一点思考,关于高手/大师/学霸

最近重新学习线代,微积分,概率论。大学的时候就没有好好学过,觉得概念,公式太多,而且很多难以理解。 而我自己一直认为数学能力还是不错的。但是到大学以后,觉得完全跟不上,和边上的人交流,包括学生和工作... 查看详情

关于自动化测试的一点思考

测试十年,有一大半时间在做手工测试。最近几年开始看一些自动化测试的东西,有多年手工测试的基础,自动化测试进展相当快,尤其是接口自动化和功能自动化。自动化测试在我看来就是用工具或者脚本一一实现手工测试的... 查看详情

周志华:关于机器学习的一点思考

周志华:关于机器学习的一点思考 https://mp.weixin.qq.com/s/sEZM_o5D6AhyMgvocbsFhw  演讲:周志华整理:肖琴、闻菲【新智元导读】机器学习如今大获成功的原因有哪些?如何才能取得进一步的突破?南京大学周志华教授在AIWOR... 查看详情

关于异常的一点思考

一、异常的(检测)触发:编译器插入检查指令(对语言规定的检查项);二、异常的基本处理机制:类似中断,生成异常场景信息,然后执行转发操作。三、异常处理的上下文:由线程货其他结构保存的类似函数调用栈的上下文... 查看详情

关于ugc的一点思考

   ugc会使互联网繁荣,但依赖大众用户创造的内容质量上会存在参差不齐,这是ugc本身存在的问题。   就拿技术论坛或社区来说,好的内容不少,但质量不好的内容也很多。社区在引导用户发言的同时,也... 查看详情

关于函数执行过程的一点思考

  刚刚有一个同学问我下面的代码出现了什么问题?大家可以一起看看,这是初学者非常容易犯的错误。<!DOCTYPEhtml><htmllang="en"><head> <metacharset="UTF-8"> <title>Document</title></head><body> <formac 查看详情

关于交大二手市场的一点思考

关于交大二手市场项目的一些思考主要问题:是否应该叫做交大二手市场,这个名字如果给你推荐,你会不会选择使用这个app或登录这个网站呢?第一部分:产品应该是什么样的1.主要针对人群:大一大二新生为买方、大三大四... 查看详情

关于共享单车的一点思考

 市场环境(1)该类产品的市场生成状况如何,收益比例如何然后再决定是否加入    共享单车是共享经济的一个代表,从政治角度来看,符合节约环保的倡导;从经济角度看,经济高速发展必然需要资源的整... 查看详情

关于多线程编程的一点思考

多线程编程主要是为了解决处理慢的问题。使用多个线程进行并发处理资源,使用的模型最多的还是生产者消费者模型。------------------------------------------------------目前我遇到的问题或者体会主要有两个:1.生产者产生速度不能大... 查看详情

关于app测试的一点思考

1 系统入口部分要细化测试用例颗粒度 充分准备好测试数据  真实覆盖线上场景 比如注册验证码的获取 国内国外手机 一般国外手机发送短信打电话都要加上区号  2新版本发布  有新功能... 查看详情

关于js中函数的返回值的一点死思考

在Javascript中,函数总是会有一个返回值。即使我们没有显示的使用“return”,程序也会隐式的返回一个“undefined”。通过下面的小demo即可理解。demo1functionfn(){return1;}fn();运行结果:1 demo2functionfn(){console.log(1);}fn(); 运行结... 查看详情

关于图像是如何运动的一点思考

   由于笔者没有学过正规的图像处理,只是自己在徒手撸控件时的一些思考,难免会有疏漏,敬请谅解。  最开始,我做一个图像变换的时候,方法是对一个个点进行单独的计算,以确定其变换的方法以及代码... 查看详情

关于task的一点思考和建议

前言本打算继续写SQLServer系列,接下来应该是死锁了,但是在.NETCore项目中到处都是异步,最近在写一个爬虫用到异步,之前不是很频繁用到异步,当用到时就有点缩手缩尾,怕留下坑,还是小心点才是,于是一发不可收拾,发... 查看详情

关于使用原生javascript的一点思考

前端很大,大到那些连类都不知道的仅仅上了培训班的人都会用jquery写网页。。。 当一个行业的从业人数出现爆发性增长时,基于规模效应,真正有用的有思想的技术就会出现。。。 这也是我推崇用原生JavaScript写代码... 查看详情

20170905:关于投资我的一点思考

  这里不讨论投资的重要性,不讨论投资的具体方法。简单的谈谈具体投资那些具体的行业,以及对应支持理论。  金融行业,如果你相信未来中国会超过美国,那么中国会有与之相匹配的金融行业。  航空业,如果你相... 查看详情

关于头文件定义的一点思考

...项目的时候,程序上遇到一个问题,困扰了我很长时间,关于关键字重定义的问题。我在一个包含了所有头文件的总头文件里面重定义了关键字,但是运行的时候还是报错,当我在这个报错的头文件里面在写一次关键字的重定义... 查看详情

关于后台系统自动生成的一点思考

大量实践发现后台管理程序,其实90%的代码都是相同的,当然是在抛弃复杂逻辑业务的情况下,那么如何能高效的节约这些时间呢,那就是接下来我要说的,对于后台系统自动生成的一些思考。适用情景:  1、表编号id为自增... 查看详情

关于后台系统自动生成的一点思考

大量实践发现后台管理程序,其实90%的代码都是相同的,当然是在抛弃复杂逻辑业务的情况下,那么如何能高效的节约这些时间呢,那就是接下来我要说的,对于后台系统自动生成的一些思考。适用情景:  1、表编号id为自增... 查看详情