Android探索之流行框架對比篇

引言

Android框架的發(fā)展的過程就是一個不斷化繁為簡的過程,大家都在研究如何正確方便高效的規(guī)范代碼。當(dāng)然這條路也永遠(yuǎn)不會停止,就像新的芽兒,隨著時間的流逝,每天都在長出新的枝葉,每天都在成長。對于技術(shù),每次新框架的提出都在剔除舊框架的詬病和痛點,演變成更方便,更高效,更簡潔的新框架,然后新的框架在具體使用中又會帶來新的詬病和痛點,反反復(fù)復(fù),無窮盡也......從開始使用MVC到使用MVP,從MVP到MVVM,每次框架的提出都有讓我們眼前一亮的東西,但具體使用中確還是存在很多的痛點,似乎一直存在一種反作用力來阻止我這樣做。但又能怎樣?新的芽兒注定會長成參天大樹,技術(shù)終究只會進(jìn)步。

咳咳,上面的雞湯你們喝起來可能無味,但對于自己經(jīng)歷了這么多框架的迭代后,結(jié)合自己親身的體會,那味道絕對濃厚。廢話不再多說,開啟今天的精彩內(nèi)容。

概述

MVC

MVC這里就不多說了,大家都熟悉的不能再熟悉了,比較古老的框架了,相信大家也都使用過;

MVC具體使用

Model:數(shù)據(jù)模型,JavaBean

View:layout布局文件

Control:Activity,處理數(shù)據(jù)請求,業(yè)務(wù)邏輯

MVC的詬病

view和control耦合嚴(yán)重,activity中存在大量的邏輯代碼,activity既是view,又是control,結(jié)構(gòu)不清晰,activity中內(nèi)容太多

MVP

MVP是在MVC的基礎(chǔ)上把Control獨立出來的模型,簡化Control的內(nèi)容,這里presenter充當(dāng)中間代理的角色,view和model不直接交互,而是通過presenter

MVP的具體使用

Model:實體模型,javabean

View:Activity和layout

Presenter:View和Model通過presenter交互

MVP的詬病

粒度很難把握,使用過MVP的都知道,MVP模型需要定義比較多的接口,view需要定義接口,presenter需要定義接口,以前我們使用一個activty能解決的問題,現(xiàn)在要將一個activity分解成一個View,一個Preseter,一個Model,每個模塊都需要使用接口來實現(xiàn)解耦,這樣就會導(dǎo)致有時候一個activity中涉及的業(yè)務(wù)比較多,按每個業(yè)務(wù)點搭建MVP模型的話,會導(dǎo)致原來一個activity類能搞定的,現(xiàn)在需要擴(kuò)展成多個接口,多個類才能實現(xiàn);粒度大的話,可能結(jié)構(gòu)不清晰;粒度小的話,代碼量又會比較大;

MVP是以UI和事件為驅(qū)動的模型,數(shù)據(jù)的獲取是被動的根據(jù)UI變動的,我們更希望是數(shù)據(jù)變化去更新UI,而不是反過來;

Presenter和View耦合度比較高;

Presenter類在業(yè)務(wù)比較復(fù)雜情況下,代碼量比較大;

MVVM

MVVM是在MVP的基礎(chǔ)上,根據(jù)谷歌提出的DateBinding方案重新設(shè)計的一個靈活高效的框架,MVVM使用ViewModel一層代替原來的Presenter層;

MVVM的使用

Model:數(shù)據(jù)模型,javaBean

View:Activty和layout

ViewModel:View和Model業(yè)務(wù)邏輯交互

MVVM的優(yōu)點

數(shù)據(jù)驅(qū)動

在MVVM中,數(shù)據(jù)的變化可以自動更新view,不需要獲取view的引用;

耦合較低

MVP模式中View和Presenter是強(qiáng)耦合的,Presenter需要拿到View的引用,這樣當(dāng)View變動時,Presenter也需要變化,耦合度太高;現(xiàn)在MVVM中,ViewModel只負(fù)責(zé)數(shù)據(jù)和業(yè)務(wù),View的變化,ViewModel不需要關(guān)系,數(shù)據(jù)變化,View自動更新,耦合度比較低;

View更新

MVVM模型中不用考慮是否在主線程中更新UI,DateBinding會負(fù)責(zé)在主線程中更新UI的,我們不用擔(dān)心線程的問題,簡單的不止一點點;

可重復(fù)利用

一個ViewModel就是一個數(shù)據(jù)源,可以將一個ViewModel綁定到不同的View中,就可以達(dá)到更新view目的

MVVM的詬病

MVVM由于是基于google的DataBinding框架的,而DataBinding支持的綁定view還比較少,因此在使用的過程中可能會遇到某些view無法使用dateBinding的情況,這點也是我之前沒有使用MVVM的原因

既然存在上面的問題,國內(nèi)外的大牛已經(jīng)幫我們封裝好了一套使用dateBinding的view庫,為避免重復(fù)造輪子,我們可以將它引入到我們的項目中直接使用,目前我知道的已經(jīng)支持常用所有view;

總結(jié)

經(jīng)過上面對不同框架的對比,相信大家都有一個基本的了解,有人會問這么多框架,我們使用那個比較好呢?

個人覺得,技術(shù)是在不斷進(jìn)步,舊的框架最終都會被新的框架所代替,我覺得MVVM的提出解決了我們使用其他框架的很多痛點,我覺得使用MVVM會更好點。

MVVM如何使用

篇幅原因,下一篇文章將為大家詳細(xì)介紹如何使用MVVM框架,敬請期待;

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容