android与mvc
⑴ Android真的推荐用MVI模式MVI和MVVM有什么区别
android自己卷自己,自己造一个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路漫漫,共勉!
如果你有需要的话,只需 私信我【进阶】即可获取
⑵ Android UI 架构演进:从 MVC 到 MVP、MVVM、MVI
Android UI架构的演变:从MVC到MVP、MVVM和MVI
随着Android开发的发展,为优化代码设计,业界不断探索和实践不同的架构模式,如MVC、MVP、MVVM和MVI,它们的核心目标是“关注点分离”,以提高代码的可维护性、测试性和可读性。最初,所有UI逻辑都集中在Activity中,导致高度耦合,难以管理。
1. MVC:Android的默认设计,将代码划分为Model、View和Controller,尽管解决了Activity代码过载问题,但Activity仍承担了View和逻辑处理的双重任务,分离不够彻底。
2. MVP:为了解决MVC的不足,MVP将逻辑分离到Presenter,使用Contract接口定义View和Presenter的交互。但双向依赖仍是其缺点。
3. MVVM:MVVM将Presenter变为ViewModel,使用观察者模式减少双向依赖。DataBinding等工具支持了MVVM的实现,但过度使用可能导致数据流混乱。
4. MVI:MVI强调单数据流,通过ViewState简化View和ViewModel之间的交互。虽然更注重响应式,但过度压缩状态可能导致复杂性。
总的来说,MVP、MVVM和MVI都试图将Activity的职责分解,但每种模式都有其局限性和适用场景。MVVM和MVP本质上相似,而MVI则引入了命令式到响应式的转变。选择哪种架构,应根据项目的具体需求和团队习惯来决定,而不是盲目追求新潮。
⑶ AndroidMVVM
姒傝堪
璇村埌AndroidMVVM锛岀浉淇″ぇ瀹堕兘浼氭兂鍒癎oogle2015骞存帹鍑虹殑DataBinding妗嗘灦銆傜劧钥屼袱钥呯殑姒傚康鏄涓崭竴镙风殑锛屼笉鑳芥贩涓轰竴璋堛侻VVM鏄涓绉嶆灦鏋勬ā寮忥纴钥娈ataBinding鏄涓涓瀹炵幇鏁版嵁鍜孶I缁戝畾镄勬嗘灦锛屾槸鏋勫缓MVVM妯″纺镄勪竴涓宸ュ叿銆
涔嫔墠鐪嬭繃寰埚氩叧浜峣ndroidMVVM镄勫崥瀹锛屼絾澶у氭暟鎻愬埌镄勯兘鏄疍ataBinding镄勫熀链鐢ㄦ硶锛屽緢灏戞湁鏂囩珷浠旂粏璁茶В鍦ˋndroid涓鏄濡备綍阃氲繃DataBinding铡绘瀯寤篗VVM镄勫簲鐢ㄦ嗘灦镄勚俈iew銆乂iewModel銆丮odel姣忎竴灞傜殑镵岃矗濡备綍?瀹冧滑涔嬮棿镵旂郴镐庢牱銆佸垎宸ュ备綍銆佷唬镰佸簲璇ュ备綍璁捐?杩欐槸鎴戝啓杩欑瘒鏂囩珷镄勫埯琛枫
鎺ヤ笅𨱒ワ纴鎴戜滑鍏堟潵鐪嬬湅浠涔堟槸MVVM锛岀劧钖庡啀涓姝ヤ竴姝ユ潵璁捐℃暣涓狭VVM妗嗘灦銆
MVC銆丮VP銆丮VVM
棣栧厛锛屾垜浠鍏埚ぇ镊翠简瑙d笅Android寮鍙戜腑甯歌佺殑妯″纺銆
MVC
View锛歑ML甯冨眬鏂囦欢銆
Model锛氩疄浣撴ā鍨(鏁版嵁镄勮幏鍙栥佸瓨鍌ㄣ佹暟鎹鐘舵佸彉鍖)銆
Controllor锛氩瑰簲浜峣ctivity锛屽勭悊鏁版嵁銆佷笟锷″拰UI銆
浠庝笂闱㈣繖涓缁撴瀯𨱒ョ湅锛孉ndroid链韬镄勮捐¤缮鏄绗﹀悎MVC鏋舵瀯镄勶纴浣嗘槸Android涓绾绮逛綔涓笃iew镄刋ML瑙嗗浘锷熻兘澶寮憋纴鎴戜滑澶ч噺澶勭悊View镄勯昏緫鍙鑳藉啓鍦ˋctivity涓锛岃繖镙禀ctivity灏卞厖褰扑简View鍜孋ontroller涓や釜瑙掕壊锛岀洿鎺ュ艰嚧Activity涓镄勪唬镰佸ぇ鐖嗙偢銆傜浉淇″ぇ澶氭暟Android寮鍙戣呴兘阆囧埌杩囦竴涓狝citivty鏁颁互鍗冭岀殑浠g爜𨱍呭喌钖!镓浠ワ纴镟磋创鍒囩殑璇存硶鏄锛岃繖涓狭VC缁撴瀯链缁埚叾瀹炲彧鏄涓涓狭odel-View(Activity:View&Controller)镄勭粨鏋勚
MVP
View:瀵瑰簲浜峣ctivity鍜孹ML锛岃礋璐View镄勭粯鍒朵互鍙娄笌鐢ㄦ埛镄勪氦浜掋
Model:渚濈劧鏄瀹炰綋妯″瀷銆
Presenter:璐熻矗瀹屾垚View涓崄odel闂寸殑浜や簰鍜屼笟锷¢昏緫銆
鍓嶉溃鎴戜滑璇达纴Activity鍏呭綋浜哣iew鍜孋ontroller涓や釜瑙掕壊锛孧VP灏辫兘寰埚ソ鍦拌В鍐宠繖涓闂棰桡纴鍏舵牳蹇幂悊蹇垫槸阃氲繃涓涓鎶借薄镄刅iew鎺ュ彛(涓嶆槸鐪熸g殑View灞)灏哖resenter涓庣湡姝g殑View灞傝繘琛岃В钥︺侾ersenter鎸佹湁璇View鎺ュ彛锛屽硅ユ帴鍙h繘琛屾搷浣滐纴钥屼笉鏄鐩存帴镎崭綔View灞伞傝繖镙峰氨鍙浠ユ妸瑙嗗浘镎崭綔鍜屼笟锷¢昏緫瑙h︼纴浠庤岃〢ctivity鎴愪负鐪熸g殑View灞伞
浣哅VP涔熷瓨鍦ㄤ竴浜涘纷绔锛
Presenter(浠ヤ笅绠绉癙)灞备笌View(浠ヤ笅绠绉癡)灞傛槸阃氲繃鎺ュ彛杩涜屼氦浜掔殑锛屾帴鍙g矑搴︿笉濂芥带鍒躲傜矑搴﹀お灏忥纴灏变细瀛桦湪澶ч噺鎺ュ彛镄勬儏鍐碉纴浣夸唬镰佸お杩囩庣増鍖;绮掑害澶澶э纴瑙h︽晥鏋滀笉濂姐傚悓镞跺逛簬UI镄勮緭鍏ュ拰鏁版嵁镄勫彉鍖栵纴闇瑕佹坠锷ㄨ皟鐢╒灞傛垨钥匬灞傜浉鍏崇殑鎺ュ彛锛岀浉瀵规潵璇寸己涔忚嚜锷ㄦс佺洃钖镐с傚傛灉鏁版嵁镄勫彉鍖栬兘镊锷ㄥ搷搴斿埌UI銆乁I镄勮緭鍏ヨ兘镊锷ㄦ洿鏂板埌鏁版嵁锛岄偅璇ュ氩ソ!
MVP鏄浠UI涓洪┍锷ㄧ殑妯″瀷锛屾洿鏂癠I閮介渶瑕佷缭璇佽兘銮峰彇鍒版带浠剁殑寮旷敤锛屽悓镞舵洿鏂癠I镄勬椂鍊栾佽冭槛褰揿墠鏄钖︽槸UI绾跨▼锛屼篃瑕佽冭槛Activity镄勭敓锻藉懆链(鏄钖﹀凡缁忛攒姣佺瓑)銆
MVP鏄浠UI鍜屼簨浠朵负椹卞姩镄勪紶缁熸ā鍨嬶纴鏁版嵁閮芥槸琚锷ㄥ湴阃氲繃UI鎺т欢锅氩𪾢绀猴纴浣嗘槸鐢变簬鏁版嵁镄勬椂鍙樻э纴鎴戜滑镟村笇链涙暟鎹鑳借浆琚锷ㄤ负涓诲姩锛屽笇链涙暟鎹鑳芥洿链夋椿镐э纴鐢辨暟鎹𨱒ラ┍锷║I銆
V灞备笌P灞傝缮鏄链変竴瀹氱殑钥﹀悎搴︺备竴镞V灞傛煇涓猆I鍏幂礌镟存敼锛岄偅涔埚瑰簲镄勬帴鍙e氨蹇呴’寰楁敼锛屾暟鎹濡备綍鏄犲皠鍒癠I涓娿佷簨浠剁洃钖鎺ュ彛杩欎簺閮介渶瑕佽浆鍙桡纴鐗典竴鍙戣屽姩鍏ㄨ韩銆傚傛灉杩欎竴灞备篃鑳借В钥﹀氨镟村ソ浜嗐
澶嶆潅镄勪笟锷″悓镞朵篃鍙鑳戒细瀵艰嚧P灞傚お澶э纴浠g爜镊冭偪镄勯梾棰树緷铹朵笉鑳借В鍐炽
MVVM
View:瀵瑰簲浜峣ctivity鍜孹ML锛岃礋璐View镄勭粯鍒朵互鍙娄笌鐢ㄦ埛浜や簰銆
Model:瀹炰綋妯″瀷銆
ViewModel:璐熻矗瀹屾垚View涓崄odel闂寸殑浜や簰锛岃礋璐d笟锷¢昏緫銆
MVVM镄勭洰镙囧拰镐濇兂涓崄VP绫讳技锛屽埄鐢ㄦ暟鎹缁戝畾(DataBinding)銆佷緷璧栧睘镐(DependencyProperty)銆佸懡浠(Command)銆佽矾鐢变簨浠(RoutedEvent)绛夋柊鐗规э纴镓挞犱简涓涓镟村姞𨱔垫椿楂樻晥镄勬灦鏋勚
鏁版嵁椹卞姩
鍦ㄥ父瑙勭殑寮鍙戞ā寮忎腑锛屾暟鎹鍙桦寲闇瑕佹洿鏂癠I镄勬椂鍊欙纴闇瑕佸厛銮峰彇UI鎺т欢镄勫紩鐢锛岀劧钖庡啀镟存柊UI銆傝幏鍙栫敤鎴风殑杈揿叆鍜屾搷浣滀篃闇瑕侀氲繃UI鎺т欢镄勫紩鐢ㄣ傚湪MVVM涓锛岃繖浜涢兘鏄阃氲繃鏁版嵁椹卞姩𨱒ヨ嚜锷ㄥ畬鎴愮殑锛屾暟鎹鍙桦寲钖庝细镊锷ㄦ洿鏂癠I锛孶I镄勬敼鍙树篃鑳借嚜锷ㄥ弽棣埚埌鏁版嵁灞傦纴鏁版嵁鎴愪负涓诲煎洜绱犮傝繖镙稭VVM灞傚湪涓氩姟阃昏緫澶勭悊涓鍙瑕佸叧蹇冩暟鎹锛屼笉闇瑕佺洿鎺ュ拰UI镓扑氦阆掳纴鍦ㄤ笟锷″勭悊杩囩▼涓绠鍗曟柟渚垮緢澶氥
浣庤﹀悎搴
MVVM妯″纺涓锛屾暟鎹鏄镫绔嬩簬UI镄勚
鏁版嵁鍜屼笟锷¢昏緫澶勪簬涓涓镫绔嬬殑ViewModel涓锛孷iewModel鍙闇瑕佸叧娉ㄦ暟鎹鍜屼笟锷¢昏緫锛屼笉闇瑕佸拰UI鎴栬呮带浠舵墦浜ら亾銆俇I𨱍虫庝箞澶勭悊鏁版嵁閮界敱UI镊宸卞喅瀹氾纴ViewModel涓嶆秹鍙娄换浣曞拰UI鐩稿叧镄勪簨锛屼篃涓嶆寔链塙I鎺т欢镄勫紩鐢ㄣ傚嵆渚挎槸鎺т欢鏀瑰彉浜(姣斿傦细TextView鎹㈡垚EditText)锛孷iewModel涔熷嚑涔庝笉闇瑕佹洿鏀逛换浣曚唬镰併傚畠闱炲父瀹岀编镄勮В钥︿简View灞傚拰ViewModel锛岃В鍐充简涓婇溃鎴戜滑镓璇寸殑MVP镄勭棝镣广
镟存柊UI
鍦∕VVM涓锛屾暟鎹鍙戠敓鍙桦寲钖庯纴鎴戜滑鍦ㄥ伐浣灭嚎绋嬬洿鎺ヤ慨鏀(鍦ㄦ暟鎹鏄绾跨▼瀹夊叏镄勬儏鍐典笅)ViewModel镄勬暟鎹鍗冲彲锛屼笉鐢ㄥ啀钥冭槛瑕佸垏鍒颁富绾跨▼镟存柊UI浜嗭纴杩欎簺浜嬫儏鐩稿叧妗嗘灦閮藉府鎴戜滑锅氢简銆
锲㈤槦鍗忎綔
MVVM镄勫垎宸ユ槸闱炲父鏄庢樉镄勶纴鐢变簬View鍜孷iewModel涔嬮棿鏄𨱒炬暎钥﹀悎镄勶细涓涓鏄澶勭悊涓氩姟鍜屾暟鎹銆佷竴涓鏄涓挞棬镄刄I澶勭悊銆傛墍浠ワ纴瀹屽叏鐢变袱涓浜哄垎宸ユ潵锅氾纴涓涓锅歎I(XML鍜孉ctivity)涓涓鍐橵iewModel锛屾晥鐜囨洿楂樸
鍙澶岖敤镐
涓涓猇iewModel鍙浠ュ岖敤鍒板氢釜View涓銆傚悓镙风殑涓浠芥暟鎹锛屽彲浠ユ彁渚涚粰涓嶅悓镄刄I铡诲仛灞旷ず銆傚逛簬鐗堟湰杩浠d腑棰戠箒镄刄I鏀瑰姩锛屾洿鏂版垨鏂板炰竴濂梀iew鍗冲彲銆傚傛灉𨱍冲湪UI涓婂仛A/BTesting锛岄偅MVVM鏄浣犱笉浜岄夋嫨銆
鍗曞厓娴嬭瘯
链変簺钖屽︿竴鐪嫔埌鍗曞厓娴嬭瘯锛屽彲鑳借剳琚嬮兘澶с傛槸鍟婏纴鍐欐垚涓锲㈡祮绯婄殑浠g爜镐庝箞鍙鑳藉仛鍗曞厓娴嬭瘯?濡傛灉浣犱滑浠ヤ唬镰佸お鐑傛棤娉曞啓鍗曞厓娴嬭瘯钥岄冮伩锛岄偅鍙鐪熸槸涓嶅ソ镄勬秷鎭浜嗐傝繖镞跺欙纴浣犻渶瑕丮VVM𨱒ユ嫰鏁戙
鎴戜滑鍓嶉溃璇磋繃浜嗭纴ViewModel灞傚仛镄勪簨鏄鏁版嵁澶勭悊鍜屼笟锷¢昏緫锛孷iew灞备腑鍏虫敞镄勬槸UI锛屼袱钥呭畬鍏ㄦ病链変緷璧栥备笉绠℃槸UI镄勫崟鍏冩祴璇曡缮鏄涓氩姟阃昏緫镄勫崟鍏冩祴璇曪纴閮芥槸浣庤﹀悎镄勚傚湪MVVM涓鏁版嵁鏄鐩存帴缁戝畾鍒癠I鎺т欢涓婄殑(閮ㄥ垎鏁版嵁鏄鍙浠ョ洿鎺ュ弽鏄犲嚭UI涓婄殑鍐呭)锛岄偅涔堟垜浠灏卞彲浠ョ洿鎺ラ氲繃淇鏀圭粦瀹氱殑鏁版嵁婧愭潵闂存帴锅氢竴浜汚ndroidUI涓婄殑娴嬭瘯銆
阃氲繃涓婇溃镄勭亩杩颁互鍙婃ā寮忕殑瀵规瘆锛屾垜浠鍙浠ュ彂鐜癕VVM镄勪紭锷胯缮鏄闱炲父鏄庢樉镄勚傝槠铹剁洰鍓岮ndroid寮鍙戜腑鍙鑳界湡姝e湪浣跨敤MVVM镄勫緢灏戯纴浣嗘槸鍊煎缑鎴戜滑铡诲仛涓浜涙帰璁ㄥ拰璋幂爷銆
濡备綍鏋勫缓MVVM搴旂敤妗嗘灦
濡备綍鍒嗗伐
鏋勫缓MVVM妗嗘灦棣栧厛瑕佸叿浣扑简瑙e悇涓妯″潡镄勫垎宸ャ傛帴涓嬫潵鎴戜滑𨱒ヨ茶ВView銆乂iewModel銆丮odel瀹冧滑钖勮嚜镄勮亴璐f墍鍦ㄣ
View
View灞傚仛镄勫氨鏄鍜孶I鐩稿叧镄勫伐浣滐纴鎴戜滑鍙鍦╔ML銆丄ctivity鍜孎ragment鍐橵iew灞傜殑浠g爜锛孷iew灞备笉锅氩拰涓氩姟鐩稿叧镄勪簨锛屼篃灏辨槸鎴戜滑鍦ˋctivity涓嶅啓涓氩姟阃昏緫鍜屼笟锷℃暟鎹鐩稿叧镄勪唬镰侊纴镟存柊UI阃氲繃鏁版嵁缁戝畾瀹炵幇锛屽敖閲忓湪ViewModel閲岄溃锅(镟存柊缁戝畾镄勬暟鎹婧愬嵆鍙)锛孉ctivity瑕佸仛镄勪簨灏辨槸鍒濆嫔寲涓浜涙带浠(濡傛带浠剁殑棰滆壊锛屾坊锷犵殑鍒嗗壊绾)锛孷iew灞傚彲浠ユ彁渚涙洿鏂癠I镄勬帴鍙(浣嗘槸鎴戜滑镟村惧悜镓链夌殑UI鍏幂礌閮芥槸阃氲繃鏁版嵁𨱒ラ┍锷ㄦ洿鏀筓I)锛孷iew灞傚彲浠ュ勭悊浜嬩欢(浣嗘槸鎴戜滑镟村笇链沀I浜嬩欢阃氲繃Command𨱒ョ粦瀹)銆傜亩鍗曞湴璇达细View灞备笉锅氢换浣曚笟锷¢昏緫銆佷笉娑夊强镎崭綔鏁版嵁銆佷笉澶勭悊鏁版嵁锛孶I鍜屾暟鎹涓ユ牸镄勫垎寮銆
ViewModel
ViewModel灞傚仛镄勪簨𨱍呭垰濂藉拰View灞傜浉鍙嶏纴ViewModel鍙锅氩拰涓氩姟阃昏緫鍜屼笟锷℃暟鎹鐩稿叧镄勪簨锛屼笉锅氢换浣曞拰UI鐩稿叧镄勪簨𨱍咃纴ViewModel灞备笉浼氭寔链変换浣曟带浠剁殑寮旷敤锛屾洿涓崭细鍦╒iewModel涓阃氲繃UI鎺т欢镄勫紩鐢ㄥ幓锅氭洿鏂癠I镄勪簨𨱍呫俈iewModel灏辨槸涓撴敞浜庝笟锷$殑阃昏緫澶勭悊锛屽仛镄勪簨𨱍呬篃閮藉彧鏄瀵规暟鎹镄勬搷浣(杩欎簺鏁版嵁缁戝畾鍦ㄧ浉搴旂殑鎺т欢涓娄细镊锷ㄥ幓镟存敼UI)銆傚悓镞禗ataBinding妗嗘灦宸茬粡鏀鎸佸弻钖戠粦瀹氾纴璁╂垜浠鍙浠ラ氲繃鍙屽悜缁戝畾銮峰彇View灞傚弽棣堢粰ViewModel灞傜殑鏁版嵁锛屽苟瀵硅繖浜涙暟鎹涓婅繘琛屾搷浣溿傚叧浜庡筓I鎺т欢浜嬩欢镄勫勭悊锛屾垜浠涔熷笇链涜兘鎶婅繖浜涗簨浠跺勭悊缁戝畾鍒版带浠朵笂锛屽苟鎶婅繖浜涗簨浠剁殑澶勭悊缁熶竴鍖栵纴涓烘ゆ垜浠阃氲繃瀵逛竴浜涘父鐢ㄧ殑浜嬩欢锅氢简灏佽咃纴鎶娄竴涓涓浜嬩欢灏佽呮垚涓涓涓狢ommand锛屽逛簬姣忎釜浜嬩欢鎴戜滑鐢ㄤ竴涓铡诲勭悊灏辫屼简锛屼细鎶娄綘鍙鑳介渶瑕佺殑鏁版嵁甯︾粰浣狅纴杩欎娇寰楁垜浠鍦╒iewModel灞傚勭悊浜嬩欢镄勬椂鍊椤彧闇瑕佸叧蹇冨勭悊鏁版嵁灏辫屼简锛屽叿浣撹丮VVMLightToolkit浣跨敤鎸囧崡镄凛ommand閮ㄥ垎銆傚啀寮鸿皟涓阆嶏细ViewModel涓嶅仛鍜孶I鐩稿叧镄勪簨銆
Model
Model灞傛渶澶х殑鐗圭偣鏄琚璧嬩篑浜嗘暟鎹銮峰彇镄勮亴璐o纴涓庢垜浠骞冲父Model灞傚彧瀹氢箟瀹炰綋瀵硅薄镄勮屼负鎴铹朵笉钖屻傚疄渚嬩腑锛屾暟鎹镄勮幏鍙栥佸瓨鍌ㄣ佹暟鎹鐘舵佸彉鍖栭兘鏄疢odel灞傜殑浠诲姟銆侻odel鍖呮嫭瀹炰綋妯″瀷(Bean)銆丷etrofit镄凷ervice锛岃幏鍙栫绣缁沧暟鎹鎺ュ彛锛屾湰鍦板瓨鍌(澧炲垹鏀规煡)鎺ュ彛锛屾暟鎹鍙桦寲鐩戝惉绛夈侻odel鎻愪緵鏁版嵁銮峰彇鎺ュ彛渚沄iewModel璋幂敤锛岀粡鏁版嵁杞鎹㈠拰镎崭綔骞舵渶缁堟椠灏勭粦瀹氩埌View灞傛煇涓猆I鍏幂礌镄勫睘镐т笂銆
濡备綍鍗忎綔
鍏充簬鍗忎綔锛屾垜浠鍏堟潵鐪嬩笅闱㈢殑涓寮犲浘锛
涓婂浘鍙嶆椠浜哅VVM妗嗘灦涓钖勪釜妯″潡镄勮仈绯诲拰鏁版嵁娴佺殑璧板悜锛屾垜浠浠庢疮涓妯″潡涓涓𨰾嗗垎𨱒ョ湅銆傞偅涔堟垜浠閲岖偣灏辨槸涓嬮溃镄勪笁涓鍗忎綔銆
ViewModel涓嵘iew镄勫岗浣溿
ViewModel涓崄odel镄勫岗浣溿
ViewModel涓嵘iewModel镄勫岗浣溿
ViewModel涓嵘iew镄勫岗浣
锲2涓璙iewModel鍜孷iew鏄阃氲繃缁戝畾镄勬柟寮忚繛鎺ュ湪涓璧风殑锛岀粦瀹氩垎鎴愪袱绉嶏细涓绉嶆槸鏁版嵁缁戝畾锛屼竴绉嶆槸锻戒护缁戝畾銆傛暟鎹镄勭粦瀹欴ataBinding宸茬粡鎻愪緵濂戒简锛岀亩鍗曞湴瀹氢箟涓浜涘氨鑳芥妸鏁版嵁鍜屾带浠剁粦瀹氩湪涓璧蜂简(濡俆extView镄则ext灞炴)锛屼絾鏄疍ataBinding妗嗘灦鎻愪緵镄勪笉澶熷叏闱锛屾瘆濡傝村备綍璁╀竴涓猆RL缁戝畾鍒颁竴涓狪mageView锛岃╄繖涓狪mageView鑳借嚜锷ㄥ幓锷犺浇url鎸囧畾镄勫浘鐗囷纴濡备綍鎶婃暟鎹婧愬拰甯冨眬妯℃澘缁戝畾鍒颁竴涓狶istView锛岃㎜istView鍙浠ヤ笉闇瑕佸幓鍐橝dapter鍜孷iewHolder鐩稿叧镄勪笢瑗?杩欎簺灏遍渶瑕佹垜浠锅氢竴浜涘伐浣滃拰绠鍗旷殑灏佽呫侻VVMLightToolkit宸茬粡甯鎴戜滑锅氢简涓閮ㄥ垎镄勫伐浣滐纴璇︽儏鍙浠ユ煡鐪婱VVMLightToolkit浣跨敤鎸囧崡銆傚叧浜庝簨浠剁粦瀹氢篃鏄涓镙凤纴MVVMLightToolkit锅氢简绠鍗旷殑灏佽咃纴瀵逛簬姣忎釜浜嬩欢鎴戜滑鐢ㄤ竴涓铡诲勭悊灏辫屼简锛屼细鎶婂彲鑳介渶瑕佺殑鏁版嵁甯︾粰浣狅纴杩欐牱鎴戜滑澶勭悊浜嬩欢镄勬椂鍊欎篃鍙鍏冲绩澶勭悊鏁版嵁灏辫屼简銆
鐢卞浘1涓璙iewModel镄勬ā鍧椾腑鎴戜滑鍙浠ョ湅鍑笃iewModel绫讳笅闱涓鑸鍖呭惈涓嬮溃5涓閮ㄥ垎锛
Context(涓娄笅鏂)
Model(鏁版嵁婧怞avaBean)
DataField(鏁版嵁缁戝畾)
Command(锻戒护缁戝畾)
ChildViewModel(瀛怴iewModel)
鎴戜滑鍏堟潵鐪嬩笅绀轰緥浠g爜锛岀劧钖庡啀涓涓璁茶В5涓閮ㄥ垎鏄骞插槢鐢ㄧ殑锛
//Activitycontext;//model锛堟暟鎹婧怞avaBean锛塸rivateNewsService.Newsnews;private.NewstopNews;//鏁版嵁缁戝畾锛岀粦瀹氩埌UI镄勫瓧娈碉纸datafield锛塸ublicfinal
})publicfinalReplyCommand
});//
ViewModel椤甸溃涔熶笉浼氭湁澶澶氩お𨱒傜殑瀛楁点**/publicstaticclassViewStyle{
=newObservableBoolean(true);
=newObservableBoolean(true);
}
Context
⑷ android开发框架有哪些
Android开发框架主要包括以下几个:
一、Android官方SDK框架
Android官方SDK框架是Android开发的基础,提供了Android系统的基础组件和开发API。它包括视图系统、资源系统、内容提供者、位置服务等模块,使开发者能够利用Android系统提供的各种功能进行应用开发。
二、MVC框架(Model-View-Controller)
MVC是一种常用的软件设计模式,在Android开发中也有着广泛的应用。MVC框架将应用程序分为三个基本组成部分:模型(Model)、视图(View)和控制器(Controller)。这种分离的方式有助于代码的模块化,提高代码的可维护性和可重用性。
三、MVVM框架(Model-View-ViewModel)
MVVM框架是MVC框架的一种改进,它引入了ViewModel层,使得视图与业务逻辑之间通过ViewModel进行交互。这提高了代码的清晰性和可测试性。在Android开发中,常见的MVVM框架实现有Data Binding和LiveData等。
四、Clean Architecture框架
Clean Architecture框架强调代码的层次性和模块化。它将应用分为多个层次,如数据层、领域层、UI层等,每层之间通过明确的接口进行交互。这种设计使得代码更加清晰,易于维护和扩展。
五、Kotlin Android Extensions框架
Kotlin Android Extensions是Kotlin语言在Android开发中的一项特性,它简化了视图与代码之间的交互。通过Kotlin的扩展属性,开发者可以直接访问UI组件,减少了大量繁琐的代码。此外,Kotlin的null安全特性也减少了空指针异常的风险。
⑸ Android 中 MVC、MVP 和 MVVM 对比
MVC、MVP和MVVM是常见的三种架构设计模式,当前MVP和MVVM的使用相对比较广泛,当然MVC也并没有过时之说。
MVC (Model-View-Controller, 模型-视图-控制器),标准的MVC是这个样子的:
简述:
缺点:
MVP (Model-View-Presenter) 是MVC的演化版本,几个主要部分如下:
简述:
解释:
优点:
缺点:
MVVM 是 Model-View-ViewModel 的简写。和 MVP 模式相比,MVVM 模式用 ViewModel 替换了 Presenter ,其他层基本上与 MVP 模式一致,ViewModel 可以理解成 是 View 的数据模型和 Presenter 的合体。MVVM 就是将其中的 View 的状态和行为抽象化,让我们将视图 UI 和业务逻辑分开。
简述:
缺点:
参考: