关于重构工作的一点思考

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

起因:

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

具体表现:

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

解决方案:

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

遇到的问题:

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

积极的一面:

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

总结:

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

时间: 2024-10-07 05:02:32

关于重构工作的一点思考的相关文章

关于找工作和工作的一点思考:劳动经济学观点

笔者不是牛人,换过工作的也不是很多,不过在找工作和工作的过程中还是形成了一点感想,写下来和大家讨论. 基本观点 我主要从经济的角度分析这个问题.首先工作是什么:是一种雇佣关系.从市场经济的角度,这是劳动在劳动市场(Labour Market)中进行交换的过程.这里就有个要注意的地方:在市场中进行交换的,是劳动,不是劳动者这个人,这个容易理解.另外,也不是劳动者的技术或能力,而是劳动这个过程.什么意思呢?比如富士康雇佣工人组装手机,对于富士康来说,它需要的是工人把手机组装起来这么一个过程.如果一个

关于工作习惯的一点思考

最近项目发布新的版本,一个月要求四个人完工上线.我负责实现接口和相应的数据处理,从整体的任务比重上看能站到20%左右.我平时做事情比较赶,也就是属于拿的活差不多有个大体了解,就开始干,到功能实现为止.所谓的功能实现,就是能拿到相应的数据,至于数据整不正确,我一点兴趣都不感.所以整个项目下来,当别人在忙着写前端实现的时候,我就开始闲了,能到别人去调我的方法的时候,才发现我的方法,这里少个判断,那里数据错位... 昨天客户要求在下班前发布新版本,并且把老版本的用户数据同步到新版本上,由于数据结构做了

关于模板方法和策略模式的一点思考

该随笔的思想原点,应该算是在两三年前了.当时和一前同事聊天.不知怎得就聊到了Http访问. 一.我记得他和我说过的第一句话,大概是:有没有已经封装好的.比较强大的HttpUtil.也可能是受业务的影响(接口对内).我当时接触到的Http访问,大多比较“规范”,至少有一个接口约束在约定着某些东西,不至于一会传递json,返回json, 一会又要传递xml,返回xml,甚至更奇葩的是,上传个文件.返回0或者1.如果真出现这样的状态,HttpUtil依然能够方便.灵活的适应着各种情况.我想这个Util

"简单设计"的一点思考

简单设计是Xp技术实践中开发实践的核心实践,“简单也是价值观中智力色彩最强烈的”,然而,提到简单设计,大家更觉得像原则或者价值观,感觉上还是比较泛,我们不妨从下面的几个角度看一下  1. 为什么要简单设计 <1>. 简单的代码更容易读懂. <2>. 好的设计更能应对变化.  这两点是基于成本和收益考虑的,这里的价值是时间及金钱.更快的满足需求,减少复杂带来的故障排查.修复成本,代码大量修改或者重写成本.  2. 什么是简单设计 对一个团队来讲,简单设计就是团队中每个人都能轻松的读懂

互联网分布式系统的一点思考

我自身没有独立自主开发和部署过 分布式系统,只有一点自己的理论上的经验. Boss之前在支付宝干活,最近发现项目中的一些疑惑时,向他请教,了解到了支付宝等互联网公司的一些情况,当然还有一些他自己的想法. 分布式系统的一点思考:多个项目,模块化,不同的模块使用不同的域名.图片和js.css存放在单独的域名. 有的模块服务化,处理 账务-用户等公共的操作,比如WebService实现. 有的只处理 页面请求,响应数据就完了,不处理具体的业务逻辑. 每个子系统部署在各自单独的集群中,这样保证99.99

技术走向管理一点思考(1)-性格特质和自我管理

技术走向管理一些思考-目录 1,管理需具备的性格特质 欣赏他人:以一种不以自我为中心的合作的方式和他人相处,能平静和客观地接受不同的人,放下自己的性格.喜好,去欣赏不同类型的人.不是通过个人友谊或者熟悉程度,而是通过某个人的性格特质和其具体的客观表现去欣赏他的价值.管理最重要的是要在乎他人,要完成从关注自己想法到关注别人想法的转变. 可信的人格:公正.诚实.守信.与人为善.律己宽人等.优秀的管理要为人表率.以德服人,本身具有魅力,能够影响别人,这就要求管理人员要有优秀.可信赖的人格.只有优秀人格

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

https://mp.weixin.qq.com/s/sEZM_o5D6AhyMgvocbsFhw 演讲:周志华 整理:肖琴.闻菲 [新智元导读]机器学习如今大获成功的原因有哪些?如何才能取得进一步的突破?南京大学周志华教授在AI WORLD 2018大会上分享他关于机器学习的一点思考:我们需要设计新的.神经网络以外的深度模型:让智能体在弱监督条件下也能够学习,以及考虑开放动态任务环境下的学习. 播放 震撼!AI WORLD 2018世界人工智能峰会开场视频 南京大学计算机系主任.人工智能学院院

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

大量实践发现后台管理程序,其实90%的代码都是相同的,当然是在抛弃复杂逻辑业务的情况下,那么如何能高效的节约这些时间呢,那就是接下来我要说的,对于后台系统自动生成的一些思考. 适用情景: 1.表编号id为自增(基于现在大部分表编号都是自增的情况): 2.没有太复杂业务关联关系,比如表的某一个字段,存储了一个json对象,为了平衡后台用户使用,需要友好的分段展示给用户的定制ui界面:还比如表中存储了外键的多个id,但为了方便用户使用,只能已标签name的方式,给用户展示,等等这些超强业务黏合逻辑的

关于前端的一点思考

关于前端的一点思考 Author:tkorays 最近写前端代码,写着写着就突然开始惆怅.忧伤.愤怒.发狂,我TMD到底在干什么啊! 很多东西写了n遍了,但是还是在不停地写着.自己写过的代码也不想再修改完善.重新利用,只是觉得,可能重新写一遍可能要好点.面对这很多库以及框架,虽然喜爱,但是也是有所顾忌,我只要使用其中的一个功能,根本不需要引入这么大的整个库. 事实上,我们可能在动手写任何代码之前,先要思考下,我们到底要的是什么! 0x00 界面真的需要这么炫酷么 在使用某个界面库之前,我们可能先