《前端架构从入门到微前端》 Chapter11. 架构演进.演进式架构

63 阅读6分钟

随着系统的业务不断增加,逐渐累加的代码会逐步去构建,优化,重构,以达到满足业务的要求

更新: 让旧的应用的依赖和环境不断更新,以免成为一个不可维护的遗留问题挑战:

依赖升级:版本号的管理

框架升级: 一旦项目采取维护方式,则需要制定一些基本策略,如:

1.确认合理的时间间隔,如三个月一次

2.定期检查依赖或者使用工具自动检测

3.为更新预留时间及精力

4.准备文档策略,以记录过程中遇到的问题

语言升级:

(1)创建全新的运行环境。

(2)准备接近线上环境的测试数据,如 Staging

(3)执行更细粒度的版本管理控制,以方便回滚,如每一次小的变更,每一个家转4级,都需要版本管理工具来记录。

(4)优先升级次要组件的版本,以方便向上兼容

(5)逐一升级核心框架,以查找对应的更新日末

(6)必要时自己编写依赖。在升级依的过程中,我们极有可能遇到的一个问题是《个依赖不再更新,此时需要自己内联这个依赖

(7)清理掉不需要的代码和文件。

(8)进行完整的用户验收测试

(9)上线前使用线上的环境进行预部署。

当然,这样升级太复杂,对于笔者来说,还有一种粗暴的迁移方式:

(1)使用最新版本的依赖,创建一个新的“hello,world”

(2)将旧应用的部分业务代码直接复制到新的项目中。

(3)修改其中不合适的代码。

迁移: 在改变小量代码的情况下,让旧的应用可以运行在新的架构上

因此,在使用新技术迁移旧的应用之前,我们需要思考如下几个问题:

(1)旧的系统出现了什么问题?

(2)拆解部分应用是否能够解决问题?

(3)有没有平滑迁移的策略?

(4)是否可能带来新的业务价值?

(5)如何降低未来的演进风险?

我们也可以采用 SW1H 分析法来分析。如果自己并非是早的迁移应用的开发者,那么可以寻找、咨询其他项目在迁移的过程中会遇到哪些问题。

事实上,对于这个问题我们已经有答案了,只是在找对应的论据来支撑自己。一旦论据充足了,信心也就坚定了。决定了迁移之后,我们可以尝试迁移应用,步骤如下:

(1)构建和提取基础设施,如组件库、代码库。

(2)确认用于练手的边缘应用。如果失败了、不合适了,那么可以尝试使用其他模式,

(3)寻找合适的解方式,包含数据、事件等。

(4)尝试对系统的其他部分进行拆分。

(5)编写对应的文档及相应的培训。

我们主要关注迁移到微前架构的几个步

(1)寻找合适的微前端技术。

(2)确认可行的微前端方案。

(3)尝试使用其中的某些方案

(4)对比、讨论几种不同方案的利弊

(5)决定适合当前项目实施的方案.

(6)尝试在一个项目中使用新架构开发。

(7)编写架构决策记录及文档,记录实施过程中常见的问题。

(8)对项目成员进行相关培训。

在整个过程中最复杂的部分是确认微前端方案。在笔者之前的一个项目里,由于当时并没有太多的方案可以选择,我们花费了大概-个月的时间在讨论

重构: 对于架构重构,往往从模块,服务级别上对应用进行代码改善

选择合适的测试框架,并引入项目中。

(1)找到需要重构的代码,编写相应的单元测试用例,

(2)提交相关的测试代码。

(3)准备进行代码重构。

(4)在没有测试的情况下,还可适当地深用 DE 重构的方式,它能在有限的字间里改的质量。IDE 权:4助于 E米对代进行重构,其通常是的规的空间里的构的主婴工作交给 IDE,而不是由开发人员通过痛苦地修改代码来完成的。在多数我们只需要按下快速键,再输入一些必要的名称和参数,重构就完成了。但是 D的范围是有限的,只能帮助我们解决简单的代码问题。

不论曾经是否引入测试,重构的流程都是相差无几的:

(1)创建一个新的重构分支。

(2)从简单的重构开始练习。如目录调整、重命名变量。

(3)小步提交。使用细致化的版本管理,方便出错后的回退管理。

(4) 对复杂的代码进行样式拆分、逻辑拆分、组件拆分。对于函数来说,可以采取提 取变量的方式进行。

(5)修改或者编写测试,保障业务功能正常。

(6)对于复杂的功能,寻找合适的人一起完成重构。

强力推荐: 《重构:改善既有代码的设计》

重写:对系统中标的部分功能,对应用进行重新设计没拆分

决定重写之前,需要考虑几点要素;

(1)迁移、升级真的不能解决问题吗?得的时间预期是多少?重写的时间花费往往比预期更长,比技术上花费的时间构、重短,但理清业务的时间更长。

(2)能接受重写的成本吗?重写不会对业务带来额外的好处,反而是在浪费时间。

(3)是否整理出完整的功能列表?只有清晰的功能列表,才能保证重写不被阳碍

(4)产品是否领先于市场?在重写期间,我们的开发速度可能会落后于其他产品是否有能力同步维护两个产品和团队?在重写期间,需要在新旧应用里实现同样的功能。

(5)在重写完成之前,是否可能变为遗留系统?要进行合理的技术选型,以避免重写

因此只有当重写应用的花费 + 维护应用的花费~维护现有系统的花费时,我们才应该老虑重写。同时在重写的过程中,还需要继续维护现有的应用。因此,一旦带宽不够,就无法支持开发人员重写应用了。

总结:

524123594858464d98d44d00b21e869.png