小女孩做網(wǎng)站勞動(dòng)局免費(fèi)培訓(xùn)電工
演變
開發(fā)常用的框架包括MVC、MVP和本文的MVVM,三種框架都是為了分離ui界面和處理邏輯而出現(xiàn)的框架模式。mvp、mvvm都由mvc演化而來(lái),他們不屬于某種語(yǔ)言的框架,當(dāng)存在ui頁(yè)面和邏輯代碼時(shí),我們就可以使用這三種模式。
model和view分別指的是數(shù)據(jù)模型和視圖,前者用于存儲(chǔ)數(shù)據(jù),后者用于展示前者的數(shù)據(jù)。
在不同的框架模型中,model和view可能會(huì)有所差別,但基礎(chǔ)功能基本不變,差別在于數(shù)據(jù)的傳輸方式。
MVC架構(gòu)
即model模型、view視圖、controller控制器,是最早出現(xiàn)的架構(gòu)。
在Android中,沒(méi)有單獨(dú)分離controller即業(yè)務(wù)層(也被稱為服務(wù)層、邏輯層,個(gè)人認(rèn)為邏輯層是最符合的名稱),而是將activity或fragment直接作為controller。同時(shí)他們即充當(dāng)了view的角色,也直接操作model中的數(shù)據(jù),有時(shí)候一個(gè)activity或fragment上千行代碼,十分臃腫。
而對(duì)于一般的mvc而言,controller需要處理用戶的輸入和事件,并直接更新視圖,導(dǎo)致視圖和控制器耦合極強(qiáng)。
MVP架構(gòu)
基于MVC架構(gòu)的改進(jìn),將View和Model之間的直接關(guān)系去除,并引入了新的層級(jí)Presenter代替原本的Controller。
這一改進(jìn)完成了Model和View的解耦。但在實(shí)際開發(fā)中,該架構(gòu)三個(gè)模塊之間的通信是靠接口實(shí)現(xiàn)的,這導(dǎo)致定義的接口和方法會(huì)非常多,即使是一個(gè)簡(jiǎn)單的頁(yè)面功能也會(huì)如此。
MVVM架構(gòu)
基于數(shù)據(jù)綁定的架構(gòu)模式,將View與Model之間進(jìn)一步解耦,引入了ViewModel。
MVVM在MVP的基礎(chǔ)上,添加了雙向綁定,使得View可以感知到ViewModel中的數(shù)據(jù)變化,View也可以感知到ViewModel的數(shù)據(jù)變化。此時(shí),當(dāng)Model中的數(shù)據(jù)發(fā)生改變時(shí),View會(huì)自動(dòng)更新,這種數(shù)據(jù)驅(qū)動(dòng)方式減少了大量手動(dòng)更新UI的代碼。
而實(shí)現(xiàn)這一數(shù)據(jù)綁定,我們要用到Android中的DataBinding,他是一種數(shù)據(jù)雙向綁定框架。