范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Android真的推荐用MVI模式?MVI和MVVM有什么区别?

  最近铺天盖地的看到Android MVI模式的文章。
  MVVM还没捂热,什么时候又来了个MVI?我们android开发这么卷吗?到底是谁在卷?
  MVI模式被造出来是为了解决什么问题的?我们要不要学MVI模式,项目中要不要用起来?
  android官方真的推荐用MVI模式?MVI和MVVM有什么区别?
  我们该应该如何学习MVI架构模式?MVI学习路线建议。
  带着这些疑问,我们一起找到答案,希望对学习MVI的小伙伴有所帮助~全称MVC:Model-View-Controller
  MVP:Model-View-Presenter
  MVVM:Model-View-ViewModel
  MVI:Model-View-Intent到底谁是"卷王"?
  android自己卷自己,自己造一个MVI架构模式吗?
  MVI架构模式是国内android开发者最近一两年造出来的吗?  当然不是,真正的"卷王"是前端。
  对你没看错,就是前端,那个想一统天下的web前端,不是android。
  看了很多MVI的资料,发现都提到cycle.js框架。android的mvi架构就是启发于cycle.js框架。  例如这篇: MVI Architecture for Android Tutorial: Getting Started
  https://www.raywenderlich.com/817602-mvi-architecture-for-android-tutorial-getting-started#toc-anchor-002
  再例如这篇: MVI(Model-View-Intent) Pattern in Android
  https://medium.com/code-yoga/mvi-model-view-intent-pattern-in-android-98c143d1ee7c
  我们再看看Cycle.js框架是什么时候开始的,又是什么时候开始使用MVI模式的。
  Cycle.js框架 第一个预发版本 :
  https://github.com/cyclejs/cyclejs/releases?page=6
  2014年就发布了。
  再结合官方文档来看,Cycle.js框架就是为了MVI架构模式而生的。
  虽然不知道,Cycle.js框架是不是首个MVI模式框架。
  但是从很多资料可以推测,MVI架构模式就是Cycle.js框架推广开来的。
  而且早在2014年就已经在前端开发中用得飞起了。
  想想2014年,咱们在干嘛?android在用什么架构模式。  那个时候大家还都在用MVC。有些优秀的团队刚开始尝试MVP。
  国内很多项目甚至连MVC都没用上,基本都是一团代码全放Activity。Model和View基本不隔离、不分层。
  正所谓,天下武功出少林啊。
  我们android的很多技术,在前端早就用"烂了"。  我们再回想回想,官方的Flutter,诞生于 Chrome 团队的一场内部实验。你再看看Flutter项目的开发是不是很像web开发?
  脸书的React,也是先有的Reactjs后有的React Native。
  虽然,天下武功出少林,但,还有一句,世间武功唯快不破,哈哈哈哈~~~
  也许随着摩尔定律的发展,未来的某一天,前端,最终会实现梦想,一统天下。为什么要创造MVI模式?--- MVI模式为了解决什么问题?结论:为了在MVC架构模式的思想上实现响应式编程范式。
  MVC主要的目的是将View和Model隔离。
  MVI在隔离View和Model的基础上,实现了响应式编程(也就是reactive编程)
  1、MVC也是MVI的爹
  我们知道MVP和MVVM的爹都是MVC。MVI的爹也是MVC。  Model-View-Intent (MVI) is reactive, functional, and follows the core idea in MVC.
  摘录自 Cycle.js官方文档
  https://cycle.js.org/model-view-intent.html#model-view-intent-what-mvc-is-really-about-sliceable
  2、MVI在MVC思想的基础上,实现了响应式编程(Reactive)范式
  MVC的Controller是命令是编程组件,不能直接实现响应式编程思想。  Model-View-Intent (MVI) is reactive, functional, and follows the core idea in MVC.
  The Controller in MVC is incompatible with our reactive ideals, because it is a proactive component.
  We can keep the MVC idea while avoiding a proactive Controller.
  摘录自Cycle.js官方文档
  3、什么是响应式编程?
  响应式编程范式(Reactive programming):  范式这个词不理解?像对象编程我们都很熟吧,面向对象也是一个编程范式。
  响应式编程范式:是一种,面向数据流和变化的申明式编程范式。
  安卓官方的compose框架、微信小程序、Flutter、React、鸿蒙UI的开发框架,都是使用响应式开发框架。
  这里就不拓展开来讲了,上面提到的任何一个开发框架,你只要会一个基本就能理解响应式编程范式。
  如果一个都不会也没关系,现在不理解响应式编程也没关系,等你学会MVI就理解了,这种只有实际使用过才能深刻理解。  我们要不要学,学不会怎么办?
  1、我们要不要学?学,当然要学。
  学会这些编程思想和架构思想,远比学会一个动效实现、学会一个开源库使用,重要的多。
  2、学不会怎么办?
  学不会也没关系,不要焦虑(尤其那些工作不久的小伙伴,学不会属于正常现象~)  就像《面向对象设计模式》,我们大学那会怎么学都学不会。
  但是工作几年后,回头去学,忽然豁然开朗,下键盘如有神~
  就像打通了任通二脉~
  MVI,咱第一遍学不会,就等2年,再学一遍~
  2年后也没学会,那就再等2年~ 一定要有耐心~
  如果还是学不会,那也没关系,因为MVI早晚也会过时~ 等过时了就不用学了~
  哈哈哈~ 别笑,正经Android可不会开玩笑的。
  就像rxjava,当年有多少人死活学不会,android开发现在谁还学Rxjava?哈哈哈~  android官方真的推荐用MVI模式?《应用架构指南》到底改了啥?最新官方的架构指南 并没有明确说他们推荐的架构模式就是MVI,但是从思想上来看确实和MVI很神似~
  https://developer.android.com/jetpack/guide?hl=zh-cn
  但是,这次android架构指南升级,我更愿意称之为MVVM的升级~
  因为这次架构指南的升级并不是彻底重构,只是在之前的MVVM的基础上做了些优化。
  升级后的MVVM实现了,响应式编程范式,我们可以面向数据流和变化编程。
  用一张图来总结这次升级的核心思想:
  旧版架构指南 - MVVMMVVM核心是在MVC的思想上实现了数据驱动UI。
  通过ViewModel将数据(Model)和UI(View)隔离,再通过LiveData将数据和UI的绑定,实现数据驱动UI,只要LiveData的数据修改UI能自动响应更新。
  升级版架构指南
  新版架构指南在旧版的基础上,做了如下调整和建议:
  1. 将LiveData组件改成了StateFlow
  对协程的使用更友好。并且更能体现面向数据流开发的思想。
  实际上,依然使用LiveData也没毛病。
  2. ViewModel传递给View的数据限制为View的UIState
  ViewModel从Model层获取数据后,转换为UIState数据,通过StateFlow流向View层。
  UIState的数据面向界面组件而定义的,是能直接控制View组件如何显示的数据。
  所以我们也可以称UIState为界面的状态或者View的状态。
  如下:data class NewsUiState(     val isSignedIn: Boolean = false,     val isPremium: Boolean = false,     val newsItems: List = listOf() )
  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  android应用架构,学习路线建议路线每一步都有一些非常优秀的学习资料。
  后面放上来。
  1. 理解MVC架构模式的思想【MVC是其他架构模式之爹,他的思想是MVP、MVVM、MVI的基础,学会它是关键步骤~】。
  2. 理解声明式编程、响应式编程、命令式编程的区别。
  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路漫漫,共勉!
  如果你有需要的话,只需私信我【进阶】即可获取

霍州市委书记李青雁带队赴晋城市考察学习1月12日至13日,霍州市委书记李青雁带队赴晋城市陵川县泽州县晋城市城区,就乡村振兴,美丽乡村建设,农业产业发展,集体经济发展,文旅产业,康养产业发展,智慧城市建设,教育园区建设,二孩三孩补贴政策好,高龄备孕事项要记牢!近日,济南市印发了济南市优化生育政策促进人口长期均衡发展实施方案,其中提出,本市户籍按照生育政策于2023年1月1日以后出生的二孩二孩家庭,每孩每月发放600月育儿补贴,直至孩子3平衡车扭扭车滑板车孩子的车该怎么挑?这几种不建议买现如今随着生活条件的提高,很多家庭都会给孩子购买专属于孩子的车车,比如扭扭车滑板车等等,还有很多父母在给孩子选车这件事上特别的纠结,那么到底该如何正确的给娃挑选呢?市场上专为孩子打人口负增长中国式现代化的巨大挑战国家统计局发布2022年国民经济运行数据,其中人口负增长备受瞩目,比上年末减少85万人。上一次人口负增长还要追溯到1961年,那时的中国深陷大饥荒,人口锐减是不得以的悲剧。而今GD孩子骨癌早期残忍放弃不要考验人性都说父母对孩子的爱是最无私最纯粹的。父母永远是孩子的退路,他们总会拼尽全力的爱孩子。但一位来自河南的网友为大家讲了这么一个故事。他有一位同学,高高大大,人很帅气,19岁的年纪1米8如何教育孩子,我们都是无证上岗家里有个二年级的小学生,她可以让整个家庭每天都鸡犬不宁。这不,我们家一大早就发生了一场大战,事件刚刚平息,不知道下一场什么时候燃爆。我也是身心俱疲,心力交瘁。现在我是多么希望国家让老师会喜欢那些打破砂锅问到底的孩子吗贝贝平时很喜欢提问题,每当遇到他不懂的都会向妈妈请教,妈妈每次都会很耐心的跟他讲解,直到他听懂了为止。但是让妈妈担心的是,如果在学校也像这样一直提问老师会不会不喜欢?于是有一次放学孩子挑食要科学对待孩子挑食怎么办好多孩子都有挑食的习惯,家长们想尽各种办法都不能纠正,时间长了孩子会出现贫血,腹痛,消瘦,生长发育迟滞症状,家长们寻医问药往往也是效果不佳。遇到这种情况家长们不要着急消费投资策略专题报告消费的新常态,厚雪依旧,长坡不同(报告出品方作者民生证券,牟一凌王况炜)1国内消费已经进入疫情右侧修复的区间1。1防疫优化以来,国内疫情快速达峰在政策优化之后,国内疫情的实际演进速度较快,明显快于海外可比国家从感沈阳中街获国家级夜间文化和旅游消费集聚区授牌1月17日,由辽宁省文化和旅游厅沈阳市人民政府主办,沈阳市文化旅游和广播电视局,中共沈河区委区人民政府承办的畅游辽宁2023辽宁省文化和旅游迎新消费季推广会活动在沈阳中街恒隆广场成劫后余生的香港餐饮集团们,想要拓店!来源餐企老板内参(IDcylbnc)作者陈黎明2020年始,香港共经历五波疫情。于2018年初刚刚突破的百亿港元月营收总额大关,在2020年第一波疫情后迅速回落至57。79亿港元,
中国女排巨星去向基本明确,球迷发出一声叹息,但选择却无可厚非对于中国女排来说,如今确实是处于一个非常困难的阶段。东京奥运会上的惨淡表现,让中国女排受到不少球迷的质疑。随后,主教练郎平指导离职,并且还曾在网上引发了激烈的争论。可以说,中国女排散文人生如茶文韵之人生如茶,苦一点不打紧,怕就怕的是无味或变味。象我这样的岁数和这样的经历的人,前方的道路是平坦还是坎坷,其实已经没太大的关系了。有书有茶还有一天从早到晚阳光的挪移也就足矣。关陈梦如愿!11月世乒赛的参赛名单中有两大意外陈梦终于如愿!刘国梁替他扫除世乒赛夺冠障碍,李隼正式摊牌目前中国乒协已经公布了11月世乒赛的参赛名单,而名单中有两大意外,首先就是三个奥运会冠军,马龙许昕刘诗雯缺席了世乒赛,对于这父亲陈万通兰州牛肉面创始人陈维精五世孙我的父亲陈万通兰州牛肉面创始人陈维精五世孙(一)父亲陈万通(陈家十七世19171997,兰州牛肉面创始人陈维精五世孙),字寄萍,小名水,是我曾祖父陈谐声起的。河南省焦作市博爱县苏寨丹麦赛何冰娇赢下德比,黄东萍双线势头强劲,女双逆转奥运冠军北京时间10月23日,2021年丹麦公开赛结束第4比赛日的争夺,中国队在三个项目闯入半决赛。何冰娇赢下德比战进入女单四强,王懿律黄东萍横扫获胜进入混双半决赛。黄东萍还与新搭档郑雨一录制现场失控,何炅愤然离场,成龙一脚踢向主持人,网友直呼活该录制节目现场失控,你会见过很多这种事情,但是,真正让网友比较称赞的就是何炅和成龙了,因为他们做法,实在是太正直了,何炅维护了自己的尊严,而成龙维护了我国的尊严,对于观众来说,这都是辽篮输球,杨鸣一问三不知!苏群点出致命弱点,网友明白人北京时间10月23日,CBA常规赛辽宁队99107爆冷输给山西遭遇赛季首败,全场辽宁队都处于被动局面,面对山西全新的战术体系完全没有应对之策,而自身的进攻与防守又打不出来,更加被动格陵兰岛希望用月球岩石改变经济矿产丰富的格陵兰岛是丹麦的半自治领土,目前在格陵兰岛西南部发现大量被称为斜长岩(Anorthosite)的古老岩石。斜长岩是一种类似于美国宇航员在太空探索早期在月球上收集的岩石。科中国一体操天才横空出世!17岁少女惊艳世锦赛,被封全场最美我们知道,全运会中,来自广西代表团的韦筱圆表现出色,打破了广西代表团52年女子全能体操项目无冠军的历史记录,以稳定的表现和出色的发挥证明了自己,为广西代表团收获了第四枚全运金牌。就十万八千里!湖人球员数据一览浓眉威少闪耀全场,瓜哥不再甜湖人再次赢球,迎来了他们赛季的第二场胜利。今天在詹姆斯因为脚踝伤势缺阵的情况下,跟马刺鏖战一个加时艰难地从圣安东尼奥带走胜利。这场球是球星球队和平民球队差距的典型案例,比赛到最后时费尔德36912轰准三双!山西4胜1负迎蜕变,但这俩小将才是看点北京时间10月25日,CBA常规赛继续进行,山西男篮迎来了对阵北控男篮的比赛,两支球队开局打得都非常不错,特别是山西男篮,虽然本赛季休赛期失去了任骏威,并且还放走了超级外援富兰克林