大型 Android 系统重构实战
黄俊彬
Thoughtworks 资深咨询师
2840 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 29 讲
大型 Android 系统重构实战
15
15
1.0x
00:00/00:00
登录|注册

08|防微杜渐:5类遗留系统典型的代码坏味道

你好,我是黄俊彬。今天我们正式进入到解耦重构篇。在这个章节中,我们将根据“分析设计篇”中分析出的问题清单重构改造 Sharing 项目,最后将设计落地到具体的代码上。
在我过去碰到的很多遗留系统中,代码都存在一些相似的问题,其中最典型的有五种:过度嵌套、重复代码、无效代码及资源、缺少抽象和随意依赖。
千里之堤,溃于蚁穴,遗留系统不是一天造成的,而是在日常开发中不断累积出来的,而这五种典型的代码坏味道其实就是推动系统演化成遗留系统的重要元凶
所以,在重构 Sharing 项目的代码之前,我们先通过一些示例看看这些代码坏味道带来的影响以及如何解决它们。当然了,最重要的是,我们怎么提前避免这些问题。

过度嵌套

我们先来看过度嵌套。过度嵌套指的是代码的圈复杂度过高,存在大量的嵌套逻辑,不方便开发人员维护和扩展功能。首先请你想一下,这个圈复杂度多少算高?多少算低呢?
提出圈复杂度概念的麦凯布给我们的建议是:若一模块的循环复杂度超过 10,需再分割为更小的模块。按照这个阈值来看,如果圈复杂度超过 10,我们就认为圈复杂度过高;如果在 5-10 之间认为是中等,可以接受;如果低于 5,就认为圈复杂度比较低了。
下面我们来看一段圈复杂度超过 10 的代码,你可以细品一下,阅读这段代码时是什么感受。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文深入探讨了遗留系统中常见的五种代码坏味道,包括过度嵌套、重复代码、无效代码及资源、缺少抽象和随意依赖。作者通过具体的代码示例和解决方案,深入浅出地阐述了这些问题的影响以及解决方法。针对过度嵌套问题,作者提出了拉平逻辑和使用多态+路由表的解决方案;对于重复代码问题,作者介绍了提取公共方法和使用接口注入的方法;针对无效代码及资源问题,作者建议使用工具自动化识别和去除,并强调了对僵尸代码的及时清理。此外,作者还提出了在项目开发中避免这些问题的建议,如静态代码扫描工具的使用和人工代码监视。整体而言,本文通过实际案例和解决方案,为读者提供了解决遗留系统代码坏味道的实用指南。文章还探讨了缺少抽象和随意依赖两种代码坏味道,并提供了相应的解决思路和实例。最后,作者鼓励读者在日常开发中重视基本的代码规范和代码质量,以更有效地避免遗留系统产生。下一节课将分享遗留系统中常用的6种安全重构手法,教读者如何通过IDE自动化完成代码的重构,减少人工修改代码。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《大型 Android 系统重构实战》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(3)

  • 最新
  • 精选
  • 刘军
    老师讲得好,终于明白“防微杜渐”的含义了。

    作者回复: hi,刘军。期待一起完成专栏的学习🤝。

    2023-03-02归属地:北京
  • 李鑫鑫
    idea 工具使用不太熟悉

    作者回复: Hi,鑫鑫。后续的课程会有实操演示,跟着课程练习就能掌握🤝。

    2023-02-27归属地:北京
  • peter
    请教老师几个问题: Q1:怎么借用Idea来使用duplicate code检查? Idea能打开安卓项目吗?没有用idea打开过安卓项目。 Q2:对于“僵尸代码”老师有什么好的实践方法? 在实际工作中,老师所经历的公司中,对于“僵尸代码”有什么方法?定期组织多人对代码进行review吗? Q3:整个应用有“热更新”吗? 上次请教老师热更新的问题,老师的回答是“我的理解是热更新是应用内插件的更新,不是整个应用的更新”, 从这句话看,似乎对于整个应用来说,没有“热更新”,应用从版本1升级到版本2,没有“热更新”的方法,只能走正常的更新流程(即重新下载、安装),是这样吗?

    作者回复: Hi,peter。 Q1:使用Intellij的付费版,选择:Code→Analyze Code→Located Duplicates,就可以扫描了。安装Android的插件页可以打开安卓项目。 Q2:对的,定期组织进行CodeReview。 Q3:整个应用有静默更新,可以理解为热更新。(但是一般在手机厂商内部才有这个机制)。整个应用的升级可以理解为只能走正常的更新流程。

    2023-02-27归属地:北京
收起评论
显示
设置
留言
3
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部