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

16|技术栈更新:消息组件Kotlin+MVVM重构

你好,我是黄俊彬。
随着项目不断的迭代,新的技术栈也会持续不断地演进。适时使用新的技术栈,可以帮助我们提高效率以及代码质量。这节课,我们就一起来学习如何安全高效地为遗留系统升级技术栈,具体我们会使用新的语言 Kotlin 以及新的架构模式 MVVM,来重构消息组件。
选择 Kotlin + MVVM,有两方面考量:一方面,Kotlin 从框架层面提供了大量的封装,可以帮我们减少工作量,无需编写大量的模板代码;另一方面,Kotlin 也是官方推荐的开发语言,MVVM 框架则是官方推荐的分层架构,为此 JetPack 也专门提供了相应的框架组件支持快速开发。
不过技术栈不同了,流程方法仍然相同,这里我们会继续使用组件内分层重构的方法。

准备:支持 Kotlin

对于遗留系统来说,通常使用的开发语言都是 Java,那么在选择 Kotlin 语言时,我们通常会有 2 种选择:第一种是 Kotlin 与 Java 语言混编,另外一种是完全使用 Kotlin 替换 Java。
至于哪种方式更好,它们之间有什么差异?我们结合例子来分析一下。
第一种方法使用 Java 与 Kotlin 混编,这个做法的好处是我们不需要改动原来的代码,只需要用 Kotlin 语言编写扩展的代码就可以了。但是缺点就是由于 Kotlin 的语言高度依赖编辑器生成转换代码,所以有些语法通过 Java 来调用 Kotlin 会比较啰嗦,例如伴生函数的调用。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

文章介绍了在技术栈更新中,使用Kotlin和MVVM架构对消息组件进行重构的过程。作者首先讨论了在遗留系统中使用Kotlin的两种选择:混编和完全替换Java,并分析了它们的优缺点。接着,文章详细介绍了MVVM架构的重构步骤,包括业务分析、代码分析、补充自动化验收测试和简单设计。在代码分析部分,作者指出了原有代码的问题,并提出了重构为MVVM架构的必要性。此外,文章还展示了补充的自动化验收测试代码,以及MVVM架构的设计模式和关键数据定义。整体而言,本文通过实际案例向读者展示了如何在遗留系统中使用新技术栈进行升级,以提高效率和代码质量。文章内容涵盖了Kotlin语言、MVVM架构、自动化测试等方面的知识,对于想要了解技术栈更新和重构的读者具有一定的参考价值。

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

全部留言(4)

  • 最新
  • 精选
  • peter
    请教老师几个问题: Q1:第二种方法是怎么转换为kotlin的? 文中开头的例子说到“第二种方法使用 Kotlin 替换 Java 的好处就是,可以减少一些跨语言调用编写问题,但是缺点是需要将原有的代码改动成 Kotlin”。 例子代码中,一个是kotlin,一个是Java,并没有Java转换为kotlin的信息啊。 Q2:假如现在开发APP,用kotlin还是Java?哪个好?如果现在会Java但不会kotlin,需要放弃Java而学习kotlin吗? Q3:kotlin有协程,安卓用Java开发的话,有协程吗?(印象中是没有的) Q4:kotlin可以用MVVM,用Java可以采用吗? Q5:Java和kotlin混合开发,除了调用不太方便,还有什么问题?比如,会有性能问题吗? Q5:MVVM和MVP都是“业务逻辑和视图分离”,似乎是一样的。那这两种模式有什么区别? Q6:老师赞成Java和kotlin混合开发吗?

    作者回复: Hi,peter。 Q1:使用IDE工具提供的转换,将java代码直接转换成Kotlin代码。 Q2:推荐使用kotlin。我理解不是放弃,而是扩展。 Q3:没有,协程是kotlin的特性。 Q4:可以。 Q5:MVVM支持双向绑定,MVP得自己定义接口。 Q6:我觉得还是看系统的状态。新系统开发建议支持使用Kotlin。遗留系统改造有个过程,可以适当考虑混编。

    2023-03-17归属地:北京
  • 永远年轻
    第五点中,应该是使用了 DataBinding 的单项绑定,数据变动会驱动 UI 变化,而 UI 变化不会驱动数据变化。双向绑定应该是 「@={vm.xxx}」

    作者回复: Hi,感谢反馈。

    2023-03-17归属地:浙江
  • 3.141516
    项目中是 Kotlin、Java 混编,有个问题想请教一下老师:Kotlin、Java 混编和纯 Kotlin 的编译时间哪个更短呢?

    作者回复: Hi,实际我没有做过精准的时间测试。网上有同学做过编译耗时的测试,你可以参考一下:https://developer.aliyun.com/article/112717。

    2023-03-17归属地:上海
  • louc
    不太严谨啊,怎么重构后,getMessageList就在主线程取数据了,之前不是在异步线程么
    2023-05-05归属地:安徽
    1
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部