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

07|分析实操:运用自动化工具诊断分析Sharing项目

你好,我是黄俊彬。上一节我给你介绍了两个遗留系统常用的分析工具:ArchUnit 和 Dependencies 依赖分析工具。
虽然我们了解了它们的基本使用方法,但是实际落地到项目中,我们经常会遇到一些问题,比如:
1. 代码散落各处,约束规则不好写?
2. 结合架构设计,怎么来设计约束规则?
3. 约束规则怎么应用到自动化分析工具上?
这节课我们就一起用 ArchUnit 和 Dependencies 对 Sharing 项目进行一次整体分析。
这个分析由五部分组成。
第一部分,将代码结构按新的架构设计进行调整。
第二部分,根据代码结构以及新架构设计定义出依赖规则。
第三部分,将依赖规则转化成 Dependencies 的 Rule 规则,然后进行扫描分析。
第四部分,将依赖规则转化成 ArchUnit 的用例,进行扫描分析。
最后,总结出从现有的代码结构按未来架构设计需要重构的问题清单,作为下一阶段代码重构的输入。
通过这节课的分析,你可以学会在实际项目中如何结合工具来落地架构分析工作,上面的问题也能得到解答。

以新架构设计来组织代码

首先,我们一起回顾一下 Sharing 项目目前代码的方式。如下图所示,所有的代码是以技术维度来组织。例如把所有页面都放在 ui 的包下,或者把所有的模型都放在 model 下。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何利用自动化工具对项目架构进行分析和诊断。作者首先讲解了项目代码结构的调整,以及如何根据新的架构设计重新组织代码结构。接着详细讲解了基于新代码结构设计的架构约束规则,并使用Dependencies依赖分析工具和ArchUnit进行分析。通过定义依赖规则和执行分析,作者展示了如何发现项目中存在的依赖问题,并提出了解决方案。整体而言,本文通过实际操作演示了如何结合自动化工具进行项目架构分析,为读者提供了一种实用的方法和思路。文章内容涵盖了架构设计、代码结构调整、约束规则定义以及自动化工具应用等方面,为读者提供了全面的技术指导。

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

全部留言(5)

  • 最新
  • 精选
  • peter
    请教老师两个问题: Q1:用Dependencies时怎么增加scope? 我用AS4.1,操作顺序:菜单Analyze  Dependencies。点击后AS开始执行Dependencies扫描,然后出现扫描结果的界面;此界面分为左右两个部分。我在此界面尝试多次,没有找到在哪里可以添加scope。(注:我的界面和文中的界面相同。) Q2:“热更新”、“热修复”的理解是否对? A“热更新”:用户安装了版本1,现在出了版本2,用户不需要先卸载版本1然后重新安装版本2,而是在版本1的基础上直接更新为版本2。 B“热修复”:与版本无关,用户安装了某一个版本,该版本有bug,在线直接打补丁来修复。 我的理解对吗?

    作者回复: Hi,peter。 Q1: 扫描结果,点击小扳手🔧,然后出现Dependency Validation的页面,再点击+号按钮,然后在ALL的选项旁边点击...的按钮就可以出现Scopes的页面了。 Q2:我的理解是热更新是应用内插件的更新,不是整个应用的更新。热修复是修改Bug。 期待你的再次留言。🤝

    2023-02-24归属地:北京
    2
    1
  • Aā 阳~
    如果模块之间存在页面复用怎么办呢,这种怎么做到不横向依赖?

    作者回复: 我的理解是可以封装抽取成基础的功能组件,这样可以让不同的业务组件复用。

    2023-09-05归属地:上海
  • 稻草人的忧桑
    这里按照包结构的写完约束,之后按照组件重构,约束规则是不是还得调整

    作者回复: Hi,何敬。 这里按照包结构写约束,包结构应该就是未来组件化架构设计的新包结构了。所以当约束用例都执行成功了也意味着完成新架构的改造。

    2023-03-23归属地:浙江
  • 稻草人的忧桑
    示例项目的archutil依赖版本,能否做一下更新

    作者回复: Hi,何敬。 代码更新在:https://github.com/junbin1011/Sharing。 对应的ArchUnit用例文件在:https://github.com/junbin1011/Sharing/blob/main/app/src/test/java/com/jkb/junbin/sharing/ArchRuleTest.java

    2023-03-06归属地:浙江
  • 中世纪的knight
    github 上Sharing项目希望老师可以保留一份重构前分支,每次重构切一次分支。

    作者回复: Hi,我们会采用单主干的提交模式,所有代码都会拆解成小步提交🤝。

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