面对一堆代码,如何开始重构? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
v2byy
V2EX    程序员

面对一堆代码,如何开始重构?

  •  3
     
  •   v2byy 2018-09-20 15:41:39 +08:00 4441 次点击
    这是一个创建于 2583 天前的主题,其中的信息可已经有所发展或是发生改变。

    无单元测试

    23 条回复    2018-09-24 22:41:42 +08:00
    neptuno
        1
    neptuno  
       2018-09-20 15:56:30 +08:00
    读懂了重写一份。。。
    nicenight
        2
    nicenight  
       2018-09-20 15:58:58 +08:00
    那就先创建单元测试
    linglongll
        3
    linglongll  
       2018-09-20 16:00:21 +08:00
    我做重构就是 把方法提取出来 不管他啥样给他包装出去 然后在调用的场景里加上注释 根据原有的逻辑重新组装一份人能看懂的 至于这些方法写成啥样 只要不是跑不了我就不管 大多数情况下这么处理 不这样的话还不如重写 当然 最好的方法还是避免重构 这就需要一手开发的时候的团队是不是给力了 这辈子真的再也不想给别人擦屁股 T.T
    tf2017
        4
    tf2017  
       2018-09-20 16:04:53 +08:00   2
    ctrl + a
    delete
    -----
    然后,重新开始……
    keysona
        5
    keysona  
       2018-09-20 16:12:19 +08:00
    理清脉络。

    从小入手,如:修改变量名 /函数名,提取函数,封装对象等。

    同时,有空自己写下单元测试。确保自己没有改错。

    最后,熟悉整个项目后,就可以大刀修改了 --> 这种时候,如果有空的话,我会选择重写。
    likaka
        6
    likaka  
       2018-09-20 16:19:31 +08:00
    ctrl+f , 谁也逃不了
    micean
        7
    micean  
       2018-09-20 16:21:58 +08:00   1
    如果对项目没有 90%以上的了解
    一点都别碰
    ren2881971
        8
    ren2881971  
       2018-09-20 16:29:21 +08:00
    你确定要重构? 有那时间干啥点不好。。 你确定能承担风险么。。
    xiaoshenke
        9
    xiaoshenke  
       2018-09-20 16:51:05 +08:00
    1 如果你是从第一版开始开发的。那就理清项目架构的,然后根据单元测试一个模块一个模块的慢慢迭代。
    2 如果你是中途接手的。额,算了吧。重构是吃力不讨好的事,干得好没你功劳,干得不好(比如某功能出问题)是要背锅的。
    v2byy
        10
    v2byy  
    OP
       2018-09-20 16:59:36 +08:00
    @xiaoshenke 中途接手,我也不想改,领导说现在代码结构有点乱,可能看我最近工作不饱和,叫我重构一下。

    顺便我想重构看能否提升下自己。。。
    d18
        11
    d18  
       2018-09-20 17:03:38 +08:00
    吃力不讨好的事情
    waytoexplorewhat
        12
    waytoexplorewhat  
       2018-09-20 17:11:27 +08:00 via Android
    先写单元测试,在确保功能 OK 的前提下重构。可以了解下测试驱动开发,建议看书,网上博客三言两语很难说清
    ben1024
        13
    ben1024  
       2018-09-20 17:13:55 +08:00
    抽象是开始的第一步,然后在想着构建业务层,数据层,在后是服务层,仓库层
    jatesun
        14
    jatesun  
       2018-09-20 17:16:27 +08:00
    最好的方法就是不重构,如果你非要重构,请叫上原来核心开发人员以及组里两三个高手先评估一天,然后从不重要的业务模块逐个重构攻破,当然单测是很有必要的
    limuyan44
        15
    limuyan44  
       2018-09-20 17:16:32 +08:00 via Android
    没有测试的重构都是在开玩笑
    zlmdaybreak
        16
    zlmdaybreak  
       2018-09-20 17:17:27 +08:00
    看乱到什么什么程度,建议现将功能比较乱的类整理、将某个简单的业务进行整理,这些不会影响太广而且容易上手。等全部都整理完之前你的工作量应该就会上来了。
    xcjx
        17
    xcjx  
       2018-09-20 17:19:58 +08:00   2
    我最喜欢干这种活儿了
    楼主一定要注意:
    重构前进行代码量统计,分析待重构部分的各方面性能指标,一定要做好记录,最好是找测试人员来做;
    这样重构之后就能邀功了…
    你不要担心没有功可邀,只要你的编码水平比之前的开发人员平均水平高那么一丢丢,各方面指标一定会有提升,因为你是一个人在架构整个模块(系统),考虑得必然比之前要全面;
    到时候就拿着这些玩意儿再写个工作汇报,写出你的思路、改进点什么的。这个活儿保准比开发新功能还有改 bug 回报更高(绩效、技术等)
    明明是重构,你要把它干成是性能优化,最后再来个技术分享,完美了。

    如果你不这么干,你就是被欺负了……
    hiluluke
        18
    hiluluke  
       2018-09-20 17:38:13 +08:00
    先加测试吧
    posebear1990
        19
    posebear1990  
       2018-09-20 17:42:00 +08:00
    新建两个目录,一个叫 new,一个叫 old,然后把老代码丢到 old 里,以后新功能在 new 里开发,重构完毕。如果是老项目的话,你可以在比较深一点的目录里看一看,弄不好就有有某个目录有个 new,同时也有个 old。
    lucky2Javascript
        20
    lucky2Javascript  
       2018-09-21 01:39:59 +08:00
    @xcjx 我现在在重写整个前端,求指点啊,感觉时间不够
    zhangjiabin1010
        21
    zhangjiabin1010  
       2018-09-21 10:03:56 +08:00
    做好回退备份,理清全部代码。
    按维度分类 先设计好新架构(要考虑到未来功能的扩展)。
    代码方面的,什么命名,解耦,封装 。看情况慢慢来就好。
    测试要完备,不然以后出问题都是麻烦啊~
    zichen
        22
    zichen  
       2018-09-21 11:07:31 +08:00
    重构代码我觉得最难的不是功能,而是理清业务,最近在带着组里的人将一个项目从.net 重构到 java,因为这个项目之前的负责人都走了,也没有什么像样的文档交接,所以只能扒代码看业务,然后还要求重构完的系统和老系统功能保持一致,关键是产品经理也走了,以前一些老的业务流程是啥样的,谁也不知道,只能靠猜,然后这个项目 50%的业务逻辑还是封在存储过程里的,存储过程可读性多差我就不用说了,总之现在刚重构完了一半,一堆坑,因为到现在我们还是没有一个人能 100%了解老项目的业务逻辑。
    aikin
        23
    aikin  
       2018-09-24 22:41:42 +08:00   1
    我一般都是先加测试,再重构。因为没有测试保障的重构,就是“耍流氓”。hahah

    分享一个之前练习重构时,整合的所有重构手法练习的栗子和测试。https://github.com/aikin/refactoring-kata
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5332 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 01:16 PVG 09:16 LAX 18:16 JFK 21:16
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86