热门标签 | 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. 仍有部分下线的实验代码充斥在项目的角角落落里

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


推荐阅读
  • Android 九宫格布局详解及实现:人人网应用示例
    本文深入探讨了人人网Android应用中独特的九宫格布局设计,解析其背后的GridView实现原理,并提供详细的代码示例。这种布局方式不仅美观大方,而且在现代Android应用中较为少见,值得开发者借鉴。 ... [详细]
  • 本章将深入探讨移动 UI 设计的核心原则,帮助开发者构建简洁、高效且用户友好的界面。通过学习设计规则和用户体验优化技巧,您将能够创建出既美观又实用的移动应用。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细介绍了 com.facebook.drawee.view.SimpleDraweeView 中的 setScaleType 方法,提供了多个实际代码示例,并解释了其在不同场景下的应用。 ... [详细]
  • 作为一名专业的Web前端工程师,掌握HTML和CSS的命名规范是至关重要的。良好的命名习惯不仅有助于提高代码的可读性和维护性,还能促进团队协作。本文将详细介绍Web前端开发中常用的HTML和CSS命名规范,并提供实用的建议。 ... [详细]
  • 深入理解ASP.NET MVC中的_ViewStart.cshtml
    本文介绍了_ViewStart.cshtml文件在ASP.NET MVC 3.0及以上版本中的作用和使用方法。该文件位于Views目录下,主要用于统一配置视图布局和其他全局设置。 ... [详细]
  • 本文介绍了Android开发中Intent的基本概念及其在不同Activity之间的数据传递方式,详细展示了如何通过Intent实现Activity间的跳转和数据传输。 ... [详细]
  • 在尝试用另一台电脑的MySQL文件替换本地D:\xampp\mysql目录后,MySQL服务无法启动。错误提示显示MySQL意外关闭,可能是由于端口冲突、依赖缺失、权限问题或崩溃等原因引起。 ... [详细]
  • 本文介绍如何使用 Android 的 Canvas 和 View 组件创建一个简单的绘图板应用程序,支持触摸绘画和保存图片功能。 ... [详细]
  • 本文详细探讨了JavaScript中的作用域链和闭包机制,解释了它们的工作原理及其在实际编程中的应用。通过具体的代码示例,帮助读者更好地理解和掌握这些概念。 ... [详细]
  • Qt QTableView 内嵌控件的实现方法
    本文详细介绍了在 Qt QTableView 中嵌入控件的多种方法,包括使用 QItemDelegate、setIndexWidget 和 setIndexWidget 结合布局管理器。每种方法都有其适用场景和优缺点。 ... [详细]
  • ------------------------------————————————————————————————1.定义一个类,实现与被增强对象相同的接口2.在类中定义一个对象,记住被增强 ... [详细]
  • 本文详细探讨了Android Activity中View的绘制流程和动画机制,包括Activity的生命周期、View的测量、布局和绘制过程以及动画对View的影响。通过实验验证,澄清了一些常见的误解,并提供了代码示例和执行结果。 ... [详细]
  • 在 Android 开发中,通过 Intent 启动 Activity 或 Service 时,可以使用 putExtra 方法传递数据。接收方可以通过 getIntent().getExtras() 获取这些数据。本文将介绍如何使用 RoboGuice 框架简化这一过程,特别是 @InjectExtra 注解的使用。 ... [详细]
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社区 版权所有