V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
sagaxu
V2EX  ›  程序员

公司项目技术老旧,是种什么体验?

  •  4
     
  •   sagaxu · 2018-07-29 16:18:40 +08:00 via Android · 16249 次点击
    这是一个创建于 2304 天前的主题,其中的信息可能已经有所发展或是发生改变。
    2015 年开始的某个项目,骨架是从 2012 年那个项目抠出来的,标配的 Java 6 和 spring 3,界面是 bootstrap2 和 jquery 画的。所有模块都在一起,出来个大大的 war 包。需求不断在加在改,不是简单维护一下了事。

    同行门,你们都是怎么对付这种陈年项目的?
    第 1 条附言  ·  2018-07-29 18:15:26 +08:00
    故事继续,在熟悉了整个系统之后,某一天我萌发了一个想法,何不做点技术栈的小更新?抱着试试看的想法,我先挑了最软的柿子捏,把 Java 6 干到了 Java 8,Tomcat 换到了最新版,非常顺利。在计划下一步行动前,我又把几百个编译警告都修正了,步子不能太大。

    几周后,着手从 spring3 升级到 spring4,并没有做很多改动,稳定运行了一段时间后,顺手把大段 XML 配置替换成了 spring 注解,后来又更新到 spring5。到这个阶段,我感觉已经比大部分公司新了^_^。

    然后我想改善一下打包发布,却发现 maven 太死,用 XML 写逻辑是很要命的,干脆把构建系统换成了 gradle,把构建脚本从大几百行缩短到了一百多行,功能不但没少,还多了。

    我觉得还不够,尝试引入了 Koltin,原本只是想写一两个类感受一下,谁知道一试就出事了,出大事了,整个项目都被逐步逐步的替换成了 Kotlin,半年之后,除了自动生成的代码,没有一行是 Java 写的了。

    这些变更,都是业余时间做的,并没有占用正常版本迭代时间,也没有因此引入 bug,反而整个系统更稳健和高效了。
    第 2 条附言  ·  2018-07-29 18:41:07 +08:00
    之后的一段时间里,脑子里有个人不停的跟我说,重写吧,推倒重来吧。正好公司业务要求有大的调整,里应外合之下,重写已经是箭在弦上,不得不发了。

    然后很自然的做了好多更新,


    前后端完全分离,前端用 element 重写

    拆分成十来个模块,变成独立的内部服务,分而治之,部分模块改用 PHP 了

    零阻塞,完全丢掉 Tomcat 堆多线程那套做法,干脆 servlet 全丢,全面拥抱了 vertx

    DI 和配置等脏活,仍然交给了 spring,直接从 springboot 1.X 最新版起步


    最近我又抽空更新到了 springboot 2.0,计划十一之后再着手把 JRE 迁移到 Java 11,明年估计还有随 Kotlin 1.3 发布的 coroutine,都是值得试试手感的事情。


    虽然这么折腾没带来什么账面收益,我也不图这个,起码我自己后续的开发和维护更加舒适了,很多常规工作,以前要 2 周工期的,后来变成了一周,后来变成了 2-3 天,现在最多半天能搞定,我可以有更多的时间做到更好。
    第 3 条附言  ·  2018-08-02 20:15:27 +08:00
    简单回复一下一些疑问

    Kotlin 和 Spring 怎么合体?
    基本姿势跟 Java 一样,比 Java 多些语法糖红利。

    Springboot 和 Vertx 怎么合体?
    Vertx 官方有 example。

    SpringMVC 能转 Vertx ?
    当然能,但异步改造并不轻松,管理后台和低负载接口,仍然可以继续用 springmvc,或者用 vertx 提供的 blocking 方法线程池。

    楼主不用做需求吗?
    当然要做,初期可能略影响进度,积累一段时间之后,重构后节省的时间大大超过重构本身的时间。渐进式重构,讲究的就是少量多餐,保持克制再克制,一次不要改太多。
    127 条回复    2018-09-27 08:57:44 +08:00
    1  2  
    huhu3312
        101
    huhu3312  
       2018-07-30 14:16:02 +08:00   ❤️ 1
    想起自己入职第一天看了代码就向领导申请重构项目。。。。。
    casztg
        102
    casztg  
       2018-07-30 14:23:58 +08:00
    抽烟的手 微微颤抖
    Alain1995
        103
    Alain1995  
       2018-07-30 14:26:08 +08:00 via Android
    1999 年的项目,表示还在维护
    vjnjc
        104
    vjnjc  
       2018-07-30 14:44:27 +08:00
    楼主运气好啊
    或者还是实力好
    laucenmi
        105
    laucenmi  
       2018-07-30 14:51:18 +08:00
    工资增了没?
    xiandao7997
        106
    xiandao7997  
       2018-07-30 14:59:42 +08:00
    @ae86 跟你一模一样,vb6 的 ide 还偶尔 crash,刚才还把 svn 从 1.6 升级到 1.9,然后不能用了,又得装回去
    yjxjn
        107
    yjxjn  
       2018-07-30 15:07:16 +08:00
    这算个屌啊。。。
    某世界五百强 IT 巨头公司
    公司内部系统开发:

    CVS/SSH1.0/DB2 for z/OS / MQ

    前端兼容 IE10,Firefox ESR 呵呵呵。。。。
    哥,我就问你绝望不???
    yjxjn
        108
    yjxjn  
       2018-07-30 15:08:19 +08:00
    @murmur 一看就是被 IBM Notes 拉进坑的。。。
    yjxjn
        109
    yjxjn  
       2018-07-30 15:10:13 +08:00
    @20015jjw Fortran 吧,cobol 路过,了解一下。。。。
    jin2ml
        110
    jin2ml  
       2018-07-30 15:13:18 +08:00
    上个世纪 90 年代的项目,jsp+servlet,业务代码全写页面里了,5000 多行的 jsp 维护的真是战战兢兢,瑟瑟发抖
    mineqiqi
        111
    mineqiqi  
       2018-07-30 15:43:52 +08:00
    楼主牛逼,描述跟写小说一样
    PDX
        112
    PDX  
       2018-07-30 15:47:01 +08:00
    servlet 过度到 vx 居然没有大问题,老哥真稳。。
    tao1991123
        113
    tao1991123  
       2018-07-30 16:09:43 +08:00
    深圳航空 目前用的航空维修管理软件 Amicos 2003 年左右部署的 用一个搜不到名字的语言写的 Prolifics
    然后好不容决定翻写出来,结果刚起步就落后,选用 PowerBuilder。然而这个项目挂了。
    于是现在继续用旧版本。
    hehe520347
        114
    hehe520347  
       2018-07-30 16:20:43 +08:00
    九几年的日本项目 vc++6.0 的,够老不。一个类里一万多行的逻辑,不调查几天都不敢改的节奏。
    grewer
        115
    grewer  
       2018-07-30 16:30:36 +08:00
    @yjxjn ie10 有什么好抱怨的, 他都支持 es6 了
    grewer
        116
    grewer  
       2018-07-30 16:34:05 +08:00
    @grewer 说错了 应该是 es5 和 h5 都已经是完美支持了
    specita
        117
    specita  
       2018-07-30 16:41:48 +08:00
    做了我一直想干又不敢干的事....
    colincat
        118
    colincat  
       2018-07-30 17:13:20 +08:00 via iPhone
    @mandy0119 游戏后台一般能用就行,真忍不了
    marktown
        119
    marktown  
       2018-07-30 17:49:51 +08:00
    去年接手公司的老项目 SSH 的,ant 编译管理,struts 框架版本太老了,被攻击了,硬着头皮把项目改成 maven 构建,把 struts 升级到最新版本,完全运行到现在,但是确实有些东西老了,不重构估计是动不了了
    Mrbird
        120
    Mrbird  
       2018-07-30 19:30:58 +08:00
    如果是真的,那你是相当厉害了
    orm
        121
    orm  
       2018-07-31 07:47:46 +08:00
    标题很知乎
    hrong
        122
    hrong  
       2018-07-31 08:53:29 +08:00 via Android
    没看懂项目最终形态用了哪些技术栈。。。懂的大哥来说说。kotlin 和 spring 怎么混在一起的。。。。
    PythonAnswer
        123
    PythonAnswer  
       2018-07-31 10:51:28 +08:00
    是的,规范化日常工作组件,可以提高效率。我现在手头一堆 excel,也组件化了,溜的飞起。
    mandy0119
        124
    mandy0119  
       2018-07-31 11:21:35 +08:00
    @colincat 不是那种管理平台。是整个 H5 游戏的后端。简直了。10 年以前的老技术。代码注释少,可读性极差
    zhangdawei
        125
    zhangdawei  
       2018-07-31 13:39:40 +08:00
    cvs
    salamanderMH
        126
    salamanderMH  
       2018-07-31 14:56:43 +08:00
    佩服三连
    Jiangyf
        127
    Jiangyf  
       2018-09-27 08:57:44 +08:00
    666
    1  2  
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5604 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 08:58 · PVG 16:58 · LAX 00:58 · JFK 03:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.