39 | 面对遗留系统,你应该这样做
郑晔
该思维导图由 AI 生成,仅供参考
你好,我是郑晔。
在上一讲中,结合着“新入职一家公司”的场景,我给你讲了如何在具体情况下应用我们前面学到的知识。这一讲,我们再来选择一个典型的实际工作场景,将所学综合应用起来。这个场景就是面对遗留系统。
在《34 | 你的代码是怎么变混乱的?》中,我给你讲了代码是会随着时间腐化的,无论是有意,还是无意。即便是最理想的场景,代码设计得很好,维护得也很精心,但随着技术的不断升级进步,系统也需要逐步升级换代。
比如,我们一直认为电信是一个独特的领域,与 IT 技术是完全独立的,学好 CT(Communication Technology,通信技术)就可以高枕无忧了。但随着 IT 技术的不断发展,今天的电信领域也开始打破壁垒,拥抱 IT 技术,提出了 ICT 的概念(Information and Communications Technology,信息通信技术)。
所以,无论怎样,系统不断升级改造是不可避免的事。问题是,你连自己三个月前写的代码都不愿意维护,那当面对庞杂的遗留系统时,你又该何去何从呢?
很多人的第一直觉是,我把系统重写一下就好了。不经思考的重写,就像买彩票一样,运气好才能写好,但大多数人没有这么好运气的,我们不能总指望买彩票中大奖改变生活。那有什么稍微靠谱的一点的路呢?
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
文章总结:面对遗留系统的改造,本文提供了宝贵的建议。首先,作者强调了分清现象与根因的重要性,建议团队首先分析现状,找到问题的根源,而不是盲目地重写系统。其次,文章强调了构建测试防护网、分成小块逐步替换、构建好领域模型以及寻找行业中关于系统构建的最新理解等关键步骤。作者还推荐了一本关于遗留代码的书《Working Effectively with Legacy Code》,强调了测试的重要性。最后,文章强调了不要回到老路上的重要性,建议小步改造遗留系统。总之,本文为面对遗留系统的技术人员提供了宝贵的经验和建议,帮助他们更好地应对遗留系统的改造挑战。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《10x 程序员工作法》,新⼈⾸单¥68
《10x 程序员工作法》,新⼈⾸单¥68
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
全部留言(18)
- 最新
- 精选
- Y024郑老师拍案惊奇书单及简评,最近各大书店有活动,可以借机囤起来了: 1.重构 作者: Martin Fowler https://book.douban.com/subject/1229923/ 严格说来,我并没有完整的读完这本书,不过,正如作者自己所说,这样的书原本就不指望能够读完,因为有一大部分其实是参考手册。正是我读过的部分让我知道了重构,让我知道这么做可以把代码写得更好。 2.敏捷软件开发 作者: Robert C·Martin https://book.douban.com/subject/1140457/ 这是一本名字赶潮流,内容很丰富的书,这本书让我开始理解软件设计,从此不再刻意追求设计模式。 3.测试驱动开发 作者: Kent Beck https://book.douban.com/subject/1230036/ 读的是英文版,因为当时中文版还没有出版,所以,我不敢说,我通过这本书很好的理解了测试驱动开发,但它却为我打开了一扇门,让我知道了一种更好的工作方式。 4.修改代码的艺术 作者: Michael Feathers https://book.douban.com/subject/2248759/ 这是一本讲解如何编写测试的书。至于这本书的具体内容,我的评价是实用。如果说不足,那么,这本书缺乏一个列表,就像Martin Fowler为《重构》所做的那样,出什么样的问题,应该采用怎样的手法进行处理。
作者回复: 你总结得真好!
2019-04-16333 - 西西弗与卡夫卡改造遗留系统或者防止代码快速腐化的一点体会就是从领域模型入手。我们有两套遗留系统:合同系统以及CRM系统。刚开始时两者比较独立,随着业务发展,两者有了比较密切的关联。方案评审时发现,大家理解业务需求没问题,但是没有分清楚领域模型,只是把需求简单归了下类,哪个是合同系统,哪个是CRM,流程搅和到了一起。我认为其中的关键是,想清楚或者定义清楚每个系统的核心价值或职责是什么,而不是看和哪个有关就丢进去
作者回复: 想清楚,最容易说,也最难做到。
2019-04-1529 - 布衣骇客现在确实有很多最佳实践,而且资料也很好找,修改遗留代码,也要根据实际业务改变而做相应修改,分成小块,逐步替代,测试更紧,保证修改有效,才不至于越改越烂。当然,最好的代码也有时效性,在变化之中寻求不变才是至关重要的
作者回复: 办法都有,套路也有,就看要不要去了解了。
2019-04-155 - TimFruit问个问题,一般web服务依赖数据库,这部分如何做好单元测试?如果去掉数据库,很难测试相应的sql语句
作者回复: 到答疑的时候,我们来聊。
2019-04-155 - 维吉立安拜 REST 所赐,行业对于 HTTP 的理解已经大踏步地向前迈进,CDN 才有了巨大的进步空间。 请问如何理解呢?
作者回复: 用对了HTTP,Get才是不变的含义,缓存才有价值,CDN才有发展。
2019-11-243 - Jxin老师,怎么获得电商行业领悟模型的领域建模实战资料?有书或则文章之类的吗?我这边就是电商供应链业务。公司发现比较快,进而几乎是以上问题的重灾区。第一步加监控,补核心或经常有问题业务块的日志,并对一些会导致脏数据的异常点加告警。第二步,补部分测试代码,重构了啥,就补啥。第三步,小步重构代码,子父类属性迁移,带事务的方法聚合,异步的方法聚合,业务代码顶层调用函数提炼。第四步,书写业务白皮书,降低其他人参与进来的成本,提高调整效率。
作者回复: 一般行业的建模资料是没有的,每个公司都会有自己的业务解决方案,很难通用。
2019-04-202 - Haile老师,“有些行业已经形成了自己在领域模型上的最佳实践”,有相关资料分享一下么,谢谢老师!
作者回复: 行业里的模型都在各个行业中,去做了就知道了。我手头没有成文的,但我知道有行业有。
2019-04-162 - 闷骚程序员老师,我想问一个关于单元测试的问题,假设我要测试的函数是一个关于tcp的网络发送函数,这个函数里面又调用了系统的send函数。但是这个函数要测试成功就需要创建socket建立tcp连接。这样为了测试这个函数我就要实现一个tcp的服务端,这样牵扯的东西也比较多,测试用例就比较复杂。所以我想问一下,老师在写类似这样功能的单元测试是怎么实现的。看了老师文章后发现单元测试很重要,也在自己项目中实践,但是这个问题一直困扰着我。谢谢
作者回复: 我们在答疑的时候讨论这个话题。
2019-04-152 - shitao正在着手重构一个系统。重构前信心满满,把老系统的一些显而易见的问题一一罗列下来,并想好了对应方案。即where are we,where are we going。 但执行过程中并非一帆风顺,重构过程中也不断发现新的问题和代码坏味道,导致重构之前的重构。 总结,过于追求完美,导致前进较慢。应该执行优先,在保证重构出比之前好的系统并解决关键问题的前提自下,速度优先
作者回复: 可能你误解了重构,回头去看看加餐,重新理解一下重构。
2019-07-151 - 北鱼今天的课程对于开发一个新系统同样很适用。 思考为什么做和做什么,最后才是思考怎么做才能够确保尽可能腐化的更慢一些? 注意多积累 领域模型和行业最佳实践。 对于全新的找不到最佳实践的新赛道,争取跨领域迁移,做成自己领域内的最佳实践。
作者回复: 有种架构设计理念叫演进式设计,就是让系统腐化得慢一些
2022-01-17
收起评论