by zhimaxingzhe from 如何接手别人的系统-遗留系统重建之道法术器势志 欢迎分享链接,尊重版权,未经作者授权,禁止转载,授权后转载请注明出处,若急用请联系。 https://zhimaxingzhe.github.io

前言

成熟的公司会有大量的存量系统,程序员难免接手他人开的的系统。万一不小心接手的系统过于腐烂,祖传代码难以破译,一边吃力不讨好艰难维护老系统,一边在上面做新业务,出了问题要背大锅,一头包,难有好成绩,满身疲惫,终成大冤种。本文尝试探讨如何接手遗留系统的方法论,重建遗留系统的道法术器势志,使得遗留系统跟上组织内系统演进和满足业务需求,逐步从泥沼中走脱。

什么是遗留系统?接手别人开发的系统,可以是各种原因导致的系统建设、维护工作的交接,对于接手人来说就属于是遗留系统;严格意义上来说任何已存在的系统都可以是遗留系统。
接手一个遗留的系统并非一定要重建它,如果是一个即将告别历史舞台的系统,我们没有必要讨论,只需要把它“送好最后一程”即可。本文讨论的范畴是遗留系统将要长期服役下去,并且会在上面发展更多业务,长出新功能的系统,也就是图中将遗留系统变成一个现代化的系统。
那么首先,在拿到交接的材料中基本了解系统后,我们从业务需求、系统功能、系统框架,特别是对系统设计有了整体的认识之后,我们就应该思考一个问题,该系统是否符合现代系统的要求,技术上应该延续现有设计,还是重构、重写、重搭、迁移。如果是延续现有系统设计,则本文往下就没有必要再往下看了。
当你认为该系统实在是烂,交到你手里维护你就要做大冤种了,这个时候就应该思考重建该系统的方法(套路)了,最好能做到私人订制。如何能做到私人订制?我们从业界成熟方法论说起,再以笔者经验实战情况,总结出能抡的三板斧。希望能帮助到各位,若有帮助,请一键三连吧。

以术载道,以道驭术,以法固道,善于驭器,勤于练术,术器生势,顺势成志。本文的内容较多,先来一览目录,源道法术器势志都包含哪些内容,随后再详细展开陈述。

一、源起-为什么要重建

首先要明确重构的动机,把动机详清楚,痛点在哪,拿出来和组内的同学一起讨论,切记要客观。是系统框架太老旧?还是系统架构难以为继?还是有很多坏代码的味道?还是因为系统太过复杂,没办法短时间内了解到全貌,处于懒惰,选择逃避?还是遗留系统太过腐烂,历经N代开发人员后,根本没有人、文档、任何材料能支撑起你去认识该系统,导致你无法从旧系统中获得知识,所以想要尽快与遗留系统划清界限?

01、遗留风险

1.业务不能满足发展
从业务角度来说系统的能力无法支持业务发展的需要,功能设计落后于业务发展,需要改造现有功能的能力。

2.系统能力不能满足发展
如系统部署架构不能满足业务规模的发展,无法支撑用户量、访问量。

3.新需求交付时间长
在不了解的系统上做需求会遇上或多或少的未知情况,需要在不断踏坑、填坑中调整,完成任务的时间需要不断加长,交付时间常常比预估的要长。

4.缺陷多,到处救火
团队长期处于救火状态,每天白天做消防员,晚上做施工员。不管是业务团队还是技术团队都处于较大压力的工作环境中,长期以往精神状态会受到影响,不利于团队建设。

5.交付周期不可控,业务无法按期开展
由于第3、第4点导致交付工作的投入不足,需要延长排期计划,无法及时上线新需求,新业务也无法按计划开展。

02、研发价值

1.研发成本高居不下

这个不需要解释了。

2.架构落后陈旧

如应用是单体的,需要集群化、微服务化、分布式化。

3.模块设计不合理

模块间边界不清晰,开发人员不能很好识别模块分层,不能正确安排类的存放路径,导致模块边界越来越不清晰,远离开闭原则。如采用MVC架构,没有严格按照MVC模块划分原则,controller 调用 dao的情况;采用DDD架构,domain之间有互相调用的情况等。

4.模式设计混乱

模式设计乱用,没能结合业务来正确使用设计模式,导致接口拓展矛盾重重。

5.代码腐烂

代码年久失修,堆积成

如何接手别人的系统-遗留系统重建的道法术器势志(万字长文)相关推荐

  1. 荐书《遗留系统:重建实战》:当你面对一坨代码时,你应该这么做

    大多数开发人员的主要时间都是花费在与现有的软件打交道上,而不是编写全新的应用程序. 这就意味着,我经常要遇到很多我写的 shit 一样的代码,你经常要遇到很多你写的 shit 一样的代码.不对,别人要 ...

  2. 推动遗留系统现代化革新的三种方式

    遗留系统是潜伏在企业IT中的巨大隐患.这个根深蒂固.枝蔓丛生的"顽疾"一旦"发作",企业就会无法正常运行,进而造成巨大的损失. 由于最初遗留系统被当成一个重要的 ...

  3. 遗留系统的往日与今生——为何遗留系统如此麻烦 | 云上观

    编者按:遗留系统改造是程序员的宿命,据 IEEE 报道,自 2010 年以来,全世界的公司和政府在 IT 产品和服务上的支出估计为 35 万亿美元.其中,约四分之三用于运营和维护现有的 IT 系统.至 ...

  4. 可视化与遗留系统的微服务改造

    -     干货分享     -  任何人类的设计都会腐化,很遗憾 软件尤其会... 其实,对于单体系统,也可以按照上下文拆分领域.如果这样做了,再把代码级的领域拆分为部署视角的微服务,也不是那么难的 ...

  5. HashiCorp Nomad和遗留系统

    容器看起来似乎无处不在.的确,它们使得将应用程序部署到开发.测试和生产环境中更加容易.然而,当容器不能工作时怎么办?为了充分利用目前可用的容器编排平台,必须对应用程序和部署流程进行大量更改.对于绿色领 ...

  6. 刚写的代码,就变成了遗留系统?

    今天想跟大家聊聊遗留系统,首先,看一下这张图 这是一家银行的核心应用系统模块之间的交互图,我想没有一个人愿意工作在这样的系统上吧? 架构混乱,模块之间职责不明,一个需求就要需要修改四五个服务,这就是遗 ...

  7. [转载]遗留系统中的RUBY中文解决方案

    看了一些朋友关于ROR中文问题的解决方法,受益匪浅:不过我的工作在一个遗留系统中,比如mysql的数据表全是latin的,sigh~`` 下面的方法有点另类,并不推荐,仅作权宜之计.若众高手有更好的方 ...

  8. 2015(4)软件工程,软件运行与维护,新旧系统转换策略,遗留系统的演化策略,数据转换与数据迁移...

    试题四 随着信息化的发展,某银行的中心账务系统,从城市中心.省中心模式已经升级到全国中心模式.但是处理各种代收代付业务的银行中间业务系统,目前仍然采用省中心模式,由各省自行负责,使得全国中间业务管理非 ...

  9. 遗留系统:IT攻城狮永远的痛

    我常常觉得我们非常幸运,我们现在所处的时代是一个令人振奋的时代,我们进入了软件工业时代.在这个时代里,我们进行软件开发已经不再是一个一个的小作坊,我们在进行着集团化的大规模开发.我们开发的软件不再是为 ...

最新文章

  1. cad关闭图层的快捷命令是什么_CAD快捷命令汇总
  2. php如何知道服务器剩余空间,远程简单地获得每台服务器的cpu与memory使用情况
  3. 面试必会系列 - 1.5 Java 锁机制
  4. [zz]linux下DHCP服务器配置(使用Ubuntu LTS 8.04)
  5. left join缺失右括号_LeetCode刷题实战31:最长有效括号
  6. Cannot create PoolableConnectionFactory。创建连接池异常
  7. [ 2022年4月8日更新 ]Typecho Handsome主题美化教程
  8. MySQL入门02-MySQL二进制版本快速部署
  9. memset()和memcpy()函数
  10. 【屏幕适配】像素密度 分辨率 dp px的关系
  11. Google 分析 SDK 之渠道统计
  12. 985本科,自学JAVA四个月,我用二年时间从银行外包跳进了阿里!
  13. 连锁店如何进行视频监控直播?移动监控视频流媒体在连锁店直播的应用
  14. 微信公众平台测试账号本地配置
  15. 计算机网络的三大功能,计算机网络的三大主要功能是什么
  16. linux14.04设置DNS,Ubuntu 16.04修改配置静态IP和DNS
  17. openjudge 1.6.2 陶陶摘苹果
  18. 使用hellocharts绘制折线图 并自定义Y轴
  19. scrapy配置user-agent中间件和ip代理中间件
  20. CSDN看书的书架入口

热门文章

  1. leetcode 1523. 在区间范围内统计奇数数目
  2. 【node】为vue获取本机IP地址
  3. ReduceLROnPlateau pytorch动态修改学习率
  4. LED显示屏8*8点阵的原理详解与汉字代码
  5. 进军国际市场,盛世昊通国际控股成功登陆美国纳斯达克
  6. 【金猿产品展】网易灵犀办公——“邮件+”未来办公新体验
  7. stm32工程模板的创建
  8. java编写文件管理器,java编写的文件管理器代码分享
  9. 树莓派4B关于cpu降频的查看与修改
  10. openfire linux 启动,Openfire的启动过程与session管理