当你准备重构一个项目的时候你会做什么准备? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
xoxo419
V2EX    程序员

当你准备重构一个项目的时候你会做什么准备?

  •  
  •   xoxo419 2017-07-31 16:39:47 +08:00 8823 次点击 /div>
    这是一个创建于 2997 天前的主题,其中的信息可能已经有所发展或是发生改变。
    43 条回复    2017-08-02 09:34:45 +08:00
    Sirormy
        1
    Sirormy  
       2017-07-31 16:48:21 +08:00   1
    先备份,然后整理文档,review 测试。
    calpamomo
        2
    calpamomo  
       2017-07-31 16:58:27 +08:00
    先确定有没有需要继续使用这个项目的现有框架,还是推倒重来比较好
    111111111111
        3
    111111111111  
       2017-07-31 17:06:49 +08:00
    测试
    文档
    测试
    feifan00x
        4
    feifan00x  
       2017-07-31 17:07:56 +08:00 via Android   1
    先点根烟
    zjsxwc
        5
    zjsxwc  
       2017-07-31 17:10:10 +08:00   1
    重构又不是重写。

    一步步按照《重构》里讲的方法就可以安全重构了,无非多写几个变量名,挪下代码位置。
    XiaoFaye
        6
    XiaoFaye  
       2017-07-31 17:12:20 +08:00
    先问老板要 Budget !!!!
    orderc
        7
    orderc  
       2017-07-31 17:14:51 +08:00   1
    写好辞职单
    xeneizes
        8
    xeneizes  
       2017-07-31 17:19:40 +08:00
    删除,重写
    Chyroc
        9
    Chyroc  
       2017-07-31 17:21:38 +08:00
    rm -rf *
    timwei
        10
    timwei  
       2017-07-31 17:25:50 +08:00
    做好灾备,这很重要
    soulmine
        11
    soulmine  
       2017-07-31 17:32:48 +08:00
    准备几瓶安眠药
    nullen
        12
    nullen  
       2017-07-31 17:40:21 +08:00
    先做减法。
    Vvfan
        13
    Vvfan  
       2017-07-31 17:52:03 +08:00
    放弃这个念头
    Qlccks2
        14
    Qlccks2  
       2017-07-31 18:11:31 +08:00
    想到之前经历,有个同事牛逼哄哄的说他负责哪个模块代码太烂要重构,重构完了业务测试时候连测试数据要初始化哪个表都不知道。
    kukat
        15
    kukat  
       2017-07-31 18:40:27 +08:00
    1. 测试
    2. JetBrains 家的 IDE
    catror
        16
    catror  
       2017-07-31 18:43:51 +08:00 via Android   1
    重构不是重写,想清楚自己想要的结果,一点点的搞就行,而不是大刀阔斧的这删掉那删掉
    hantsy
        17
    hantsy  
       2017-07-31 19:00:49 +08:00
    在中国,大多数公司都是饮鸩止渴的开发,求的是第一时间做个界面出来,代码基本上都是垃圾。基本上从项目一开始基本上没什么架构设计的概念,初期 Research 也不会写 POC。本该重构的最后都是 Rebuild,Rewrite,Revolution。。。哪有 Refactor,Evolution,Migration 的说法。
    keysona
        18
    keysona  
       2017-07-31 19:13:33 +08:00
    睡个觉冷静下。
    LeoNG
        19
    LeoNG  
       2017-07-31 19:15:23 +08:00
    自问自己最近是不是太闲了,竟然有了这么冲动的想法。
    hellohello123
        20
    hellohello123  
       2017-07-31 19:19:04 +08:00   1
    仔细理清现有代码逻辑,一步步来,步子迈大了,容易扯着蛋
    finian
        21
    finian  
       2017-07-31 19:25:40 +08:00 via Android
    冲个凉水澡,抽根烟,然后取消这个念头
    xiaoxiao0
        22
    xiaoxiao0  
       2017-07-31 19:28:29 +08:00 via Android
    分批,重构一批测试一批
    Cabana
        23
    Cabana  
       2017-07-31 19:43:43 +08:00 via Android
    哈哈,前段时间没事干傻逼呼呼的把公司 app 代码全部重写,写了 1/5,弃了…
    wangdu2012
        24
    wangdu2012  
       2017-07-31 19:45:20 +08:00 via iPhone
    理清楚业务,在规划业务,在设计方案,在逐步实现
    voocel
        25
    voocel  
       2017-07-31 20:03:55 +08:00   5
    反手就给自己来一巴掌!
    sagaxu
        26
    sagaxu  
       2017-07-31 20:43:31 +08:00 via Android
    如果不是代码实在维护不下去了,干嘛重构,成了没有功劳,没成就是没事找事给团队添乱
    akira
        27
    akira  
       2017-07-31 22:59:57 +08:00   1
    1. 先点根烟,想清楚自己准备要做的事情有多炒蛋。
    2. 备份,再三确认代码是否有做好备份。
    Rice
        28
    Rice  
       2017-07-31 23:04:38 +08:00 via iPhone
    单元测试?
    carlclone
        29
    carlclone  
       2017-07-31 23:06:29 +08:00 via Android
    @hantsy 大神写太多术语啦,求相关书籍
    msg7086
        30
    msg7086  
       2017-07-31 23:42:01 +08:00
    申请预算,招几个人,然后把项目代码 Shift-del。
    IamRobot
        31
    IamRobot  
       2017-08-01 00:01:00 +08:00 via Android
    准备一箱方便面
    ie88
        32
    ie88  
       2017-08-01 08:22:31 +08:00 via Android
    真的不开玩笑,冷静点,放弃这个念头
    flyingghost
        33
    flyingghost  
       2017-08-01 10:25:21 +08:00
    准备好细软。
    omygod
        34
    omygod  
       2017-08-01 10:42:51 +08:00
    先读几篇心灵鸡汤
    Wangxf
        35
    Wangxf  
       2017-08-01 11:13:41 +08:00
    重构一个项目技术倒是其次考虑的,首先要把业务梳理清楚
    ZhLTE
        36
    ZhLTE  
       2017-08-01 11:54:38 +08:00
    抽根烟冷静下
    rswl
        37
    rswl  
       2017-08-01 12:13:32 +08:00
    抽根烟冷静一下 确定要重构吗
    RangerWolf
        38
    RangerWolf  
       2017-08-01 13:31:21 +08:00   1
    不知道楼上一堆冷嘲热讽的人是怎么想的, 重构是一个项目很重要的一步。 除非业务业务已经不需要任何变动。

    有单元测试的重构会比较保险。
    pljhonglu
        39
    pljhonglu  
       2017-08-01 15:01:29 +08:00
    做好相关人员的心里安抚工作~
    hotdigger
        40
    hotdigger  
       2017-08-01 15:47:41 +08:00
    1、用户调查:当前项目的需求方是否都还在?当前用户对现有功能满意与不满意的地方是什么?程序员眼中的垃圾代码或功能往往对用户来说,却是很好用的功能或特性。
    2、业务调查:分析业务对此项目最重要的功能依赖是哪些,是否允许分步骤平滑过渡。
    3、文档调查:检查是否之前的需求文档、设计文档及用户手册以及重要模块的代码注释是否有?如果没有,当事人(需求方以及开发者)是否还在?相当多的自主开发项目都是文档不全,或者严重过时。更多的设计是在程序员的大脑里。
    4、项目复杂度评估:重要项目重构,需要做详细的风险评估,特别是时间风险,老板往往不一定有足够的耐心让你投入大量的人力与物力进行项目重构,毕竞老板是结果思维,特别是老板不懂技术,需要老板的支持。
    5、分步上线计划,重构最重要的事情,个人认为是将功能分步完成,测试,并分功能模块上线。让老板看到阶段目标,让用户更早接触到新系统。
    6、用户期望的引导,在重构之前,根据第一步用户调查的结果,把新系统对旧系统的改进提升跟用户沟通,以及短期内还无法达到部分期望的原因。最简单的办法,是充分尊重用户的意愿,让用户参与进来,这是重构系统成功能的重要保证。如果用户参与了新系统的设计,新系统更替让系统遇到的阻力会小很多。
    hotdigger
        41
    hotdigger  
       2017-08-01 15:49:24 +08:00
    汗,看成重写系统了。。。。如果对题主没有帮助,请忽略!
    chemandy
        42
    chemandy  
       2017-08-01 16:39:11 +08:00
    准备跑路
    zengyuxi
        43
    zengyuxi  
       2017-08-02 09:34:45 +08:00
    巧了,我这个两个星期正好在重构项目中最复杂的一个核心模块,使用了几个设计模式好好设计了一下,整体的可读性和后期的拓展性确实很大的提高!

    我觉得不论是重构项目还是重构模块:
    首先考虑的是架构,你是否能 hold 住?譬如 MVC 架构--》重构成 MVVC+RX 的架构!
    重构的复杂度问题?建议一点一点的重构,先重构架构,然后一个模块一个模块的拆分重构
    个人认为,模块重构的话,时间充裕的话,直接重写!一来加深对业务的理解,二来重新设计重新写的过程对自己技术的提升是非常快的!(性能优化,设计优化,架构优化。。。)
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     916 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 22:03 PVG 06:03 LAX 15:03 JFK 18:03
    Do have faith in what you're doing.
    ubao 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