Google 推荐使用 MVI 架构?卷起来了~
Posted 鸿洋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Google 推荐使用 MVI 架构?卷起来了~相关的知识,希望对你有一定的参考价值。
distinctUntilChanged() 类会尝试进行网络请求,然后更新UI State,然后UI层可以对其做出适当反应。
类,或者为与付款相关的数据创建 PaymentsRepository 类。当然为了方便,针对只有一个数据源的Repository,也可以将数据源的代码也写在Repository,后续有多个数据源时再做拆分。
数据层跟之前的MVVM架构下的数据层并没用什么区别,这里就不多介绍了,关于数据层的详细信息可见:
https://developer.android.com/jetpack/guide/data-layer
而界面层则从MVVM架构变成了MVI架构,强调了数据的单向数据流动与状态的集中管理。相比MVVM架构,MVI架构主要有以下优点。
当然在软件开发中没有最好的架构,只有最合适的架构,各位可根据情况选用适合项目的架构,实际上在我看来Google在指南中推荐使用MVI而不再是MVVM,很可能是为了统一Android与Compose的架构。因为在Compose中并没有双向数据绑定,只有单向数据流动,因此MVI是最适合Compose的架构。
当然如果你的项目中没有使用DataBinding,或许也可以开始尝试一下使用MVI,不使用DataBinding的MVVM架构切换为MVI成本不高,切换起来也比较简单,在易用性,数据一致性,可测试性,可维护性等方面都有一定优势,后续也可以无缝切换到Compose。
MVVM 进阶版:MVI 架构了解一下~:
https://juejin.cn/post/7022624191723601928)
MVI 架构更佳实践:支持 LiveData 属性监听:
https://juejin.cn/post/7025222741322121223
MVI 架构封装:快速优雅地实现网络请求:
https://juejin.cn/post/7027815347281477645
Android应用架构指南:
https://developer.android.com/jetpack/guide
最后推荐一下我做的网站,玩Android: wanandroid.com ,包含详尽的知识体系、好用的工具,还有本公众号文章合集,欢迎体验和收藏!
推荐阅读:
点击 关注我的公众号
如果你想要跟大家分享你的文章,欢迎投稿~
┏(^0^)┛明天见!
Android真的推荐用MVI模式?MVI和MVVM有啥区别?
参考技术Aandroid自己卷自己,自己造一个MVI架构模式吗?
MVI架构模式是国内android开发者最近一两年造出来的吗?
看了很多MVI的资料,发现都提到cycle.js框架。android的mvi架构就是启发于cycle.js框架。
我们再看看Cycle.js框架是什么时候开始的,又是什么时候开始使用MVI模式的。
Cycle.js框架 第一个预发版本 :
https://github.com/cyclejs/cyclejs/releases?page=6
再结合官方文档来看,Cycle.js框架就是为了MVI架构模式而生的。
虽然不知道,Cycle.js框架是不是首个MVI模式框架。
但是从很多资料可以推测,MVI架构模式就是Cycle.js框架推广开来的。
而且早在2014年就已经在前端开发中用得飞起了。
想想2014年,咱们在干嘛?android在用什么架构模式。
正所谓,天下武功出少林啊。
我们android的很多技术,在前端早就用“烂了”。
我们知道MVP和MVVM的爹都是MVC。MVI的爹也是MVC。
MVC的Controller是命令是编程组件,不能直接实现响应式编程思想。
响应式编程范式(Reactive programming):
安卓官方的compose框架、微信小程序、Flutter、React、鸿蒙UI的开发框架,都是使用响应式开发框架。
这里就不拓展开来讲了,上面提到的任何一个开发框架,你只要会一个基本就能理解响应式编程范式。
如果一个都不会也没关系,现在不理解响应式编程也没关系,等你学会MVI就理解了,这种只有实际使用过才能深刻理解。
学不会也没关系,不要焦虑(尤其那些工作不久的小伙伴,学不会属于正常现象~)
MVI,咱第一遍学不会,就等2年,再学一遍~
2年后也没学会,那就再等2年~ 一定要有耐心~
如果还是学不会,那也没关系,因为MVI早晚也会过时~ 等过时了就不用学了~
哈哈哈~ 别笑,正经Android可不会开玩笑的。
就像rxjava,当年有多少人死活学不会,android开发现在谁还学Rxjava?哈哈哈~
用一张图来总结这次升级的核心思想:
新版架构指南在旧版的基础上,做了如下调整和建议:
1. 将LiveData组件改成了StateFlow
对协程的使用更友好。并且更能体现面向数据流开发的思想。
实际上,依然使用LiveData也没毛病。
2. ViewModel传递给View的数据限制为View的UIState
ViewModel从Model层获取数据后,转换为UIState数据,通过StateFlow流向View层。
UIState的数据面向界面组件而定义的,是能直接控制View组件如何显示的数据。
所以我们也可以称UIState为界面的状态或者View的状态。
如下:
3. 单数据流还是多数据流的选择
官方指南并没有强制我们使用单流。
同一个界面应该使用单个StateFlow还是多个StateFlow,需要我们自己判断。
我们应该根据UIStates数据们之间关联程度来决定多流还是单流。
单流优缺点都十分明显:
优点: 数据集中管控,会提高代码的可读性和修改的便利性。
缺点: 当数据非常多且复杂时,会影响效率。因为我们没有diff功能,View层不能只更新有变化的数据,只会根据UIState刷新当前界面。
https://developer.android.com/jetpack/guide/ui-layer#additional-considerations
我们再看下官方新版架构图:
当然不仅仅MVVM可以改造成响应式开发范式,MVP也是可以的。
不信你看 这篇blog :
https://www.raywenderlich.com/817602-mvi-architecture-for-android-tutorial-getting-started
1. 理解MVC架构模式的思想【MVC是其他架构模式之爹,他的思想是MVP、MVVM、MVI的基础,学会它是关键步骤~】。
3. 学习kotlin的StateFlow组件,的使用:Sequence->Flow->StateFlow。
4. 学习ViewModel组件的使用(虽然不用ViewModel也能实现MVI架构,但是ViewModel还是值得学习)。
5. 理解DRY(Don\'t Repeat Yourself)原则。
6. 理解MVVM(因为官方的MVI模式是基于MVVM的基础改造的~)。
7. 学习官方架构指南。
8. 实战。
在这里就分享一份由大佬亲自收录整理的 学习PDF+架构视频+面试文档+源码笔记 , 高级架构技术进阶脑图、Android开发面试专题资料,高级进阶架构资料
这些都是我现在闲暇时还会反复翻阅的精品资料。里面对近几年的大厂面试高频知识点都有详细的讲解。相信可以有效地帮助大家掌握知识、理解原理,帮助大家在未来取得一份不错的答卷。
当然,你也可以拿去查漏补缺,提升自身的竞争力。
真心希望可以帮助到大家,Android路漫漫,共勉!
如果你有需要的话,只需 私信我【进阶】即可获取
以上是关于Google 推荐使用 MVI 架构?卷起来了~的主要内容,如果未能解决你的问题,请参考以下文章
Android真的推荐用MVI模式?MVI和MVVM有啥区别?