热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

说说重构那些小事一:小视频落地页重构一期

最近在针对视频落地页做一系列的代码重构。工作之余,又把之前的《重构:改善代码的既有设计》复习了一下。有了一些新的感悟和想法。故而有了这一系列的文章。规划

最近在针对视频落地页做一系列的代码重构。工作之余,又把之前的《重构:改善代码的既有设计》复习了一下。有了一些新的感悟和想法。故而有了这一系列的文章。规划的是讲一讲自己在项目中的心路思考及对重构的新认识。

0x01.重构原因

因为历史原因,小视频落地页几个主要的类代码都在3500行-4000行之间:

Large Class带来的问题和风险是多样的:更低的代码可维护性、更低的代码可读性、大量的成员变量、冗余重复的代码、因为实验负向下线的不再使用的代码,随着版本迭代,这些都会造成类的膨胀,随便一个落地页的需求,大家都会往这三个类里塞代码,最终代码的可维护性会越来越低。

短视频落地页需求。短视频落地页这个需求也推动了我们去做这次重构。

在小视频落地页落地一些研发需求越来越困难,举一个简单的栗子,recycleview的复用回收机制显然是比viewpager要优秀很多的,目前的落地页在低端机上滑动卡顿比较明显,但是当我们尝试把滑动组件从viewpager切换到recycleview的时候,发现因为大量的业务逻辑和埋点逻辑,基本不太可能,Large Class承载了太多职责,散落各处的业务逻辑、打点逻辑,也让我们在推动技术需求落地的时候举步维艰。
….
基于以上的背景,落地页的重构很有必要。

0x02.重构目的

提升代码的可读性和可维护性
为后续增加新的功能铺路

0x03.重构一期

重构一期主要做了三件事:

  1. 根据功能将XXXHolder的职责拆分到不同的block中去
  2. 对XXXManager请求做重构,支持短视频和小视频两套请求
  3. 整理落地页包结构

我们来看下简易架构调整:
旧版:
在这里插入图片描述
重构后:
在这里插入图片描述
我们对比前后发现,XXXHolder代码拆出来了1500多行,这只是一个最直观的感受。这件事情的长期收益是,建立了落地页功能的边界,如果下次开发一个互动区的需求,在以前RD会直接在XXXHolder里继续增加代码,但是重构后,RD会在相应的XXXLeafingLayout中去增加代码,这样不仅不会继续加重XXXHolder的职责,反而可以把互动区的职责很好的封装起来,如果我新写一个holder也需要互动区的功能,我不需要copy XXXHolder里2000多行的代码,只需要引用一下XXXlLeafingLayout就可以了,让block具备了一定的复用能力。

0x04.如何控制风险?

重构,肯定都有一定的风险,但是考虑到长期收益,还是要做重构的事情。
所以针对重构,对风险如何把控呢?

  1. 循序渐进的重构,不要想着一口气吃个胖子,逐步重构,逐步自测,逐步验证,保证风险可控;
  2. 在重构过程中要记录好影响的功能和部分,提交给QA重点验证;
  3. 如果有单元测试,就更好了
  4. 保证充分的自测,充分的暴露问题给QA

0x05.遗留问题

一期重构后,我们发现,还有一些问题是没有解决掉的,比如:

  1. XXXAdapter代码已经增加到4000多行
  2. entity在落地页各个类中传来传去,被改来改去,里面的landdetail是在另外一个接口返回时才有值,此外,因为各种业务逻辑,entity 里面有大量的控制变量
  3. 仍有部分下线的实验代码充斥在项目的角角落落里

以上的我们可以在重构二期中去解决


推荐阅读
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了OC学习笔记中的@property和@synthesize,包括属性的定义和合成的使用方法。通过示例代码详细讲解了@property和@synthesize的作用和用法。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 解决VS写C#项目导入MySQL数据源报错“You have a usable connection already”问题的正确方法
    本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ... [详细]
  • 拥抱Android Design Support Library新变化(导航视图、悬浮ActionBar)
    转载请注明明桑AndroidAndroid5.0Loollipop作为Android最重要的版本之一,为我们带来了全新的界面风格和设计语言。看起来很受欢迎࿰ ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • Day2列表、字典、集合操作详解
    本文详细介绍了列表、字典、集合的操作方法,包括定义列表、访问列表元素、字符串操作、字典操作、集合操作、文件操作、字符编码与转码等内容。内容详实,适合初学者参考。 ... [详细]
  • 海马s5近光灯能否直接更换为H7?
    本文主要介绍了海马s5车型的近光灯是否可以直接更换为H7灯泡,并提供了完整的教程下载地址。此外,还详细讲解了DSP功能函数中的数据拷贝、数据填充和浮点数转换为定点数的相关内容。 ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 微信小程序导航跟随的实现方法
    本文介绍了在微信小程序中实现导航跟随的方法。通过设置导航的position属性和绑定滚动事件,可以实现页面向下滚动到导航位置时,导航固定在页面最上方;页面向上滚动到导航位置时,导航恢复到原始位置;点击导航可以平滑跳转到相应位置。代码示例也给出了具体实现方法。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • android 触屏处理流程,android触摸事件处理流程 ? FOOKWOOD「建议收藏」
    android触屏处理流程,android触摸事件处理流程?FOOKWOOD「建议收藏」最近在工作中,经常需要处理触摸事件,但是有时候会出现一些奇怪的bug,比如有时候会检测不到A ... [详细]
  • SmartRefreshLayout自定义头部刷新和底部加载
    1.添加依赖implementation‘com.scwang.smartrefresh:SmartRefreshLayout:1.0.3’implementation‘com.s ... [详细]
author-avatar
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有