當前位置:首頁 » 安卓系統 » android與mvc

android與mvc

發布時間: 2025-01-04 22:14:16

⑴ 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錛塸ublicfinalimageUrl=new<>();publicfinalhtml=new<>();publicfinaltitle=new<>();//涓涓鍙橀噺鍖呭惈浜嗘墍鏈夊叧浜嶸iewStyle鐩稿叧鐨勫瓧孌祊ublicfinalViewStyleviewStyle=newViewStyle();//鍛戒護緇戝畾錛坈ommand錛塸ublicfinalonRefreshCommand=newReplyCommand<>(()->{

})publicfinalReplyCommandonLoadMoreCommand=newReplyCommand<>((itemCount)->{

});//itemViewModel=newObservableArrayList<>();/***ViewStyle鍏充簬鎺т歡鐨勪竴浜涘睘鎬у拰涓氬姟鏁版嵁鏃犲叧鐨凷tyle鍙浠ュ仛涓涓鍖呰9錛岃繖鏍蜂唬鐮佹瘮杈冪編瑙傦紝

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 和業務邏輯分開。

簡述:

缺點:

參考:

熱點內容
gradle命令編譯 發布:2025-01-08 09:37:43 瀏覽:617
mysql客戶端linux 發布:2025-01-08 09:37:31 瀏覽:375
怎麼知道手機密碼是多少oppo 發布:2025-01-08 09:35:23 瀏覽:653
sql1205 發布:2025-01-08 09:35:20 瀏覽:740
4g網路與配置的研究思路怎麼寫 發布:2025-01-08 09:20:31 瀏覽:458
計演算法的淺談 發布:2025-01-08 09:14:24 瀏覽:389
路由器固定ip的首選dns伺服器 發布:2025-01-08 09:13:47 瀏覽:282
b開頭壓縮包 發布:2025-01-08 08:58:36 瀏覽:32
考試酷的密碼怎麼找回 發布:2025-01-08 08:58:29 瀏覽:110
視頻直播網站源碼 發布:2025-01-08 08:57:55 瀏覽:636