如何接手别人的系统-遗留系统重建的道法术器势志(万字长文)
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.代码腐烂
代码年久失修,堆积成
如何接手别人的系统-遗留系统重建的道法术器势志(万字长文)相关推荐
- 荐书《遗留系统:重建实战》:当你面对一坨代码时,你应该这么做
大多数开发人员的主要时间都是花费在与现有的软件打交道上,而不是编写全新的应用程序. 这就意味着,我经常要遇到很多我写的 shit 一样的代码,你经常要遇到很多你写的 shit 一样的代码.不对,别人要 ...
- 推动遗留系统现代化革新的三种方式
遗留系统是潜伏在企业IT中的巨大隐患.这个根深蒂固.枝蔓丛生的"顽疾"一旦"发作",企业就会无法正常运行,进而造成巨大的损失. 由于最初遗留系统被当成一个重要的 ...
- 遗留系统的往日与今生——为何遗留系统如此麻烦 | 云上观
编者按:遗留系统改造是程序员的宿命,据 IEEE 报道,自 2010 年以来,全世界的公司和政府在 IT 产品和服务上的支出估计为 35 万亿美元.其中,约四分之三用于运营和维护现有的 IT 系统.至 ...
- 可视化与遗留系统的微服务改造
- 干货分享 - 任何人类的设计都会腐化,很遗憾 软件尤其会... 其实,对于单体系统,也可以按照上下文拆分领域.如果这样做了,再把代码级的领域拆分为部署视角的微服务,也不是那么难的 ...
- HashiCorp Nomad和遗留系统
容器看起来似乎无处不在.的确,它们使得将应用程序部署到开发.测试和生产环境中更加容易.然而,当容器不能工作时怎么办?为了充分利用目前可用的容器编排平台,必须对应用程序和部署流程进行大量更改.对于绿色领 ...
- 刚写的代码,就变成了遗留系统?
今天想跟大家聊聊遗留系统,首先,看一下这张图 这是一家银行的核心应用系统模块之间的交互图,我想没有一个人愿意工作在这样的系统上吧? 架构混乱,模块之间职责不明,一个需求就要需要修改四五个服务,这就是遗 ...
- [转载]遗留系统中的RUBY中文解决方案
看了一些朋友关于ROR中文问题的解决方法,受益匪浅:不过我的工作在一个遗留系统中,比如mysql的数据表全是latin的,sigh~`` 下面的方法有点另类,并不推荐,仅作权宜之计.若众高手有更好的方 ...
- 2015(4)软件工程,软件运行与维护,新旧系统转换策略,遗留系统的演化策略,数据转换与数据迁移...
试题四 随着信息化的发展,某银行的中心账务系统,从城市中心.省中心模式已经升级到全国中心模式.但是处理各种代收代付业务的银行中间业务系统,目前仍然采用省中心模式,由各省自行负责,使得全国中间业务管理非 ...
- 遗留系统:IT攻城狮永远的痛
我常常觉得我们非常幸运,我们现在所处的时代是一个令人振奋的时代,我们进入了软件工业时代.在这个时代里,我们进行软件开发已经不再是一个一个的小作坊,我们在进行着集团化的大规模开发.我们开发的软件不再是为 ...
最新文章
- cad关闭图层的快捷命令是什么_CAD快捷命令汇总
- php如何知道服务器剩余空间,远程简单地获得每台服务器的cpu与memory使用情况
- 面试必会系列 - 1.5 Java 锁机制
- [zz]linux下DHCP服务器配置(使用Ubuntu LTS 8.04)
- left join缺失右括号_LeetCode刷题实战31:最长有效括号
- Cannot create PoolableConnectionFactory。创建连接池异常
- [ 2022年4月8日更新 ]Typecho Handsome主题美化教程
- MySQL入门02-MySQL二进制版本快速部署
- memset()和memcpy()函数
- 【屏幕适配】像素密度 分辨率 dp px的关系
- Google 分析 SDK 之渠道统计
- 985本科,自学JAVA四个月,我用二年时间从银行外包跳进了阿里!
- 连锁店如何进行视频监控直播?移动监控视频流媒体在连锁店直播的应用
- 微信公众平台测试账号本地配置
- 计算机网络的三大功能,计算机网络的三大主要功能是什么
- linux14.04设置DNS,Ubuntu 16.04修改配置静态IP和DNS
- openjudge 1.6.2 陶陶摘苹果
- 使用hellocharts绘制折线图 并自定义Y轴
- scrapy配置user-agent中间件和ip代理中间件
- CSDN看书的书架入口
热门文章
- leetcode 1523. 在区间范围内统计奇数数目
- 【node】为vue获取本机IP地址
- ReduceLROnPlateau pytorch动态修改学习率
- LED显示屏8*8点阵的原理详解与汉字代码
- 进军国际市场,盛世昊通国际控股成功登陆美国纳斯达克
- 【金猿产品展】网易灵犀办公——“邮件+”未来办公新体验
- stm32工程模板的创建
- java编写文件管理器,java编写的文件管理器代码分享
- 树莓派4B关于cpu降频的查看与修改
- openfire linux 启动,Openfire的启动过程与session管理