我与重构的不解之缘

2024-03-09 04:59
文章标签 重构 不解之缘

本文主要是介绍我与重构的不解之缘,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

电商平台,交易环节必不可少。如正向交易流程中的购物车、下单页、收银台等;逆向交易的退款、仲裁等。从用户角度看,用户通过业务多样性的层层吸引来到交易环节,自然会很希望完成交易的流程也拥有绝佳的体验;从公司业务的角度,我们需要给交易环节提供高效、高稳定的支撑。

现状问题

交易环节经历一个长时间的迭代演变,回过头看,存在以下问题:

  • 点状分布,无法可控

    每个交易页面的业务逻辑都很个体化,形成了点,但没有考虑上下游的应用情况,无法感知交易链路上下游环节问题,导致无法串成线,组成面。当业务场景逐渐增多时,只能每个点修修补补,为了兼容功能,交互会逐渐不流畅,项目维护成本也随之增高。

  • 冗余代码逻辑较多

    业务发展过程中,有很多阶段性的试错,后续被遗忘,出现断层遗留。在做需求迭代时,很容易被潜在逻辑坑一把。并且,代码冗余,必定会在性能上有折损。

  • 注释文档缺失

    依靠人的记忆和扒代码,确认应用范围,定位问题和维护迭代,均有效率损失

  • 资源无法共享

    随着公共规范的建设成型,交易团队使用的 React 技术栈与大团队使用 Vue 技术栈不同。很多公共能力无法复用,增加了研发成本;团队的沉淀,也无法反哺公共能力。


无论从业务的快速支撑,还是技术变现来看,以上问题都会造成人效和系统稳定性上的损失。

考虑到我司业务的未来增势,交易能够更好地支撑住业务。我们需要化被动为主动:重构迫在眉睫

如何重构

曾经,我以为确定重构的项目后,接下来准备工作:

  1. 简单过线上流程,大致了解结构

  2. 粗略的过一遍原有的工程代码

  3. 与产品聊一下历史逻辑

然后,就可以确定技术方案,歘歘歘的写完代码和文档,就完事了。

但开发过程的坎坷和上线后的返工,让我意识到这样的重构还不够。

作为项目重构的发起者,其角色不仅仅是一个前端开发者。TA 是产品,是设计师,是测试,更是一个用户。

以重构购物车项目为例,记录下重构的一些心得

  • 前期充分收集信息

  1. 产出 PRD:通过熟悉工程代码和借助 PM/RD/QA 等认知,梳理出需覆盖的页面及页面详尽的功能,产出 PRD。下面是我重构购物车时候整理的产品功能图,做好这一步,会让重构事半功倍。

  • 页面流程图

  • 基础页面

  • 梳理购物车功能点

  1. 确认交互细节:根据 PRD 原型跑通线上所有流程,整理细节交互。有些特殊逻辑、情景,模拟困难,找测试同学一起配合,尽可能还原应用场景。

  • 购物车截图

  • 凑单页截图

    购物车
  • 项目目标同步

    这次重构不仅是换个语言再实现一遍功能,是在用户体验、日后维护效率、项目质量上都要有相应的提升以及目标。

  • 技术方案设计

    重构,不求快,求稳,求极致

    在做技术方案时,不仅考虑用已知能力去解决问题,可以抱着目标结果最优化,尝试引入新技术方式解决问题。虽然会带来一定的时间成本,但值得。

    输出业务功能框架和流程图:

  1. 项目基础结构图

  2. 流程图

  3. 功能模块拆分设计

  • 技术方案评审

    以项目负责人心态组织项目启动评审会,组织产品、UI、研发、测试进行需求评审,整体回归项目,对项目需求进行最终确认。

  • 排期

    这部分就是相关人员,如:UI、研发、测试,对项目的工作量进行评估工期。

  • 开发

    拿到 UI 交互图后,仔细查看是否跟技术方案设计匹配,有疑问点及时沟通。

    • 购物车交互 UI 图

    • 凑单页交互 UI 图

    • 开发日报 开发过程中每天要发日报,跟产品、测试同步进度阶段风险同步。

    • 定期发起 Code Review 及时发现并解决问题。

  • 测试

    开发完成后,需要自测通过冒烟 case,然后交给测试同学整体测试回归项目,测试通过后让产品、UI 以及业务方进行体验。

  • 复盘

    项目上线一周后进行复盘会,复盘项目线上效果,项目目标是否完成,过程中是否有改善的地方等等,大家畅所欲言,沉淀总结。此次购物车重构,上线效果很好,虽然还有优化空间,但整个过程很清晰,顺畅许多。后续可以根据复盘内容针对性的持续优化。


  • 整体的重构流程可以梳理成:

    以上,是不完全的重构心得。

    总结

    重构的目的是为了以后新加功能时更容易,让新功能可以尽快上线,代码的结构清晰,让代码变得可读、可维护、可扩,实际是在为以后做准备。

    重构之路任重而道远。在后续的项目重构中,我会继续总结提炼一些方式,持续完善,让重构收益最大化。

    每天进步一点点,质变从关注 大转转 FE 开始。

这篇关于我与重构的不解之缘的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/789582

相关文章

Mybatis Plus快速重构真批量sql入库操作

Mybatis快速重构真批量sql入库操作 基本思路 重构mybatis默认方法saveBatch和saveOrUpdateBatch的实现 基本步骤 真批量保存实现类InsertBatchMethod真批量更新实现类MysqlInsertOrUpdateBath注册InsertBatchMethod和MysqlInsertOrUpdateBath到EasySqlInjector注册Eas

【C/C++内存管理】——我与C++的不解之缘(六)

前言         最近开学了,更新有些迟缓了; 现在来学C/C++中的内存管理 一、C/C++内存分布         在之前C一样学习过程中,学到过一些内存分布;现在先来看以下代码: int globalVar = 1;static int staticGlobalVar = 1;void Test(){static int staticVar = 1;int loc

[机缘参悟-222] - 系统的重构源于被动的痛苦、源于主动的精进、源于进化与演进(软件系统、思维方式、亲密关系、企业系统、商业价值链、中国社会、全球)

目录 前言:系统的重构源于被动的痛苦、源于主动的精进、源于进化与演进 一、软件系统的重构 1、重构的定义与目的 2、重构的时机与方法 3、重构的注意事项 4、重构的案例分析 二、大脑思维的重构 1、大脑思维重构的定义 2、大脑思维重构的方法 3、大脑思维重构的挑战与前景 三、认知的重构 1、定义 2、目的 3、方法 四、实例 五、总结 四、婚姻家庭的重构 1、婚

总结如何成为“好”代码——读《重构:改善既有代码的设计》有感

读后感 说是“读后感”,其实并不是看得很仔细,尤其是各种代码例子,我基本上是跳过的。个人觉得,重构这件事上,关键是要能嗅出坏代码,知道什么是好代码,这样目标明确后,重构的手段其实是水到渠成的,唯一要注意的就是书中强调的:要以小步为单位稳打稳扎进行。 我所理解的“好”代码 核心目标 那么如何才是“好”代码?书中的答案是:“人们是否能轻而易举地修改”,而我觉得抽象层级更高的描述是:易于未来的工

数据结构 - 二叉树(重构 + 遍历)

写在前面 昨天有同学问到我一题关于重构二叉树的问题(link),做了一下,也做个记录吧! 所谓二叉树的重构,就是给你前序和中序,或者中序和后序,让你还原这棵二叉树. 注意:给出前序和后序是不能唯一确定一棵二叉树的,证明请看这儿.   一.给出前序和中序,重构二叉树 一个递归的过程: 当前结点的value:每一轮根据前序的第一个元素确定当前结点值. 左子树的中序遍历

来自Uber的12条架构重构经验

来自Uber的12条架构重构经验 2016-02-04  来源:聊聊架构 分类:架构  阅读(56) 评论(0)  对于开发者来说,架构设计是软件研发过程中最重要的一环,所谓没有图纸,就建不了房子。在遍地App的互联网时代,架构设计有了一些比较成熟的模式,开发者和架构师也可以经常借鉴。 但是,随着应用的不断发展,最初的架构往往面临着各种问题,比如无法满足客户的需求、无法实现应用的扩

重构手法之重新组织函数

重构手法之重新组织函数 在重构的手法中,很大的一部分是对函数进行整理,使函数能够恰当地包装代码(让代码自己说话而不是写更多的注释)。重新组织函数的驱动力,往往都是由于函数过长。因为函数过长就以为着包含了更多属性和逻辑,这样复杂的逻辑和诸多属性(如函数内部的局部变量或者静态变量等)会让代码变得难以维护,需要对其进行重新组织。 提炼函数 在冗长的函数中提炼出精小的函数,让每个短小函数负责的

LeetCode 重构二叉搜索数,即找出两个被交换的节点

原题:Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing its structure. Note: A solution using O(n) space is pretty straight forward. Could you de

QNN:基于QNN+example重构之后的yolov8det部署

QNN是高通发布的神经网络推理引擎,是SNPE的升级版,其主要功能是: 完成从Pytorch/TensorFlow/Keras/Onnx等神经网络框架到高通计算平台的模型转换; 完成模型的低比特量化(int8),使其能够运行在高通神经网络芯片上; 提供测试工具(qnn-net-run),可以运行网络并保存输出; 提供测试工具(qnn-profile-viewer),可以进行FLOPS、参数量、每