日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

談?wù)凙ndroid項(xiàng)目框架的前世今生

 新進(jìn)小設(shè)計(jì) 2021-12-17

嗨,大家好,今天出了大太陽,真是美好的開始。
這篇文章和大家說說Android屆流行的三大框架,了解下架構(gòu)的前世今生,以及我對于這些框架的一些認(rèn)識和看法。

三大框架區(qū)別

MVC

  • 架構(gòu)介紹

Model:數(shù)據(jù)模型,比如我們從數(shù)據(jù)庫或者網(wǎng)絡(luò)獲取數(shù)據(jù)
View:視圖,也就是我們的xml布局文件
Controller:控制器,也就是我們的Activity

  • 模型聯(lián)系

View --> Controller,也就是反應(yīng)View的一些用戶事件(點(diǎn)擊觸摸事件)到Activity上。
Controller --> Model, 也就是Activity去讀寫一些我們需要的數(shù)據(jù)。
Controller --> View, 也就是Activity在獲取數(shù)據(jù)之后,將更新內(nèi)容反映到View上。

這樣一個(gè)完整的項(xiàng)目架構(gòu)就出來了,也是我們早期進(jìn)行開發(fā)比較常用的項(xiàng)目架構(gòu)。

  • 優(yōu)缺點(diǎn)

這種缺點(diǎn)還是比較明顯的,主要表現(xiàn)就是我們的Activity太重了,經(jīng)常一寫就是幾百上千行了。
造成這種問題的原因就是Controller層和View層的關(guān)系太過緊密,也就是Activity中有太多操作View的代碼了。

但是!但是!我覺得Android這種默認(rèn)的開發(fā)結(jié)構(gòu)稱不上傳統(tǒng)的MVC結(jié)構(gòu),因?yàn)锳ctivity又可以叫View層又可以叫Controller層,所以細(xì)說的話根本就分不出來層級,只是做了一些封裝,然后Activity承載了所有。
當(dāng)然這是我個(gè)人看法,可以都來討論下。

MVP

  • 架構(gòu)介紹

之前不就是因?yàn)?code>Activity中有操作view,又做Controller工作嗎。
所以其實(shí)MVP架構(gòu)就是從原來的Activity層把viewController區(qū)分開,單獨(dú)抽出來一層Presenter作為原來Controller的職位。
然后最后演化成,將View層寫成接口的形式,然后Activity去實(shí)現(xiàn)View接口,最后在Presenter類中去實(shí)現(xiàn)方法。

Model:數(shù)據(jù)模型,比如我們從數(shù)據(jù)庫或者網(wǎng)絡(luò)獲取數(shù)據(jù)。
View:視圖,也就是我們的xml布局文件和Activity。
Presenter:主持人,單獨(dú)的類,只做調(diào)度工作。

  • 模型聯(lián)系

View --> Presenter,反應(yīng)View的一些用戶事件到Presenter上。
Presenter --> Model, Presenter去讀寫操作一些我們需要的數(shù)據(jù)。
Controller --> View, Presenter在獲取數(shù)據(jù)之后,將更新內(nèi)容反饋給Activity,進(jìn)行view更新。

  • 優(yōu)缺點(diǎn)

這種的優(yōu)點(diǎn)就是確實(shí)大大減少了Activity的負(fù)擔(dān),讓Activity主要承擔(dān)一個(gè)更新View的工作,然后把跟Model交互的工作轉(zhuǎn)移給了Presenter,從而由Presenter方來控制和交互Model方以及View方。所以讓項(xiàng)目更加明確簡單,順序性思維開發(fā)。

缺點(diǎn)也很明顯:
首先就是代碼量大大增加了,每個(gè)頁面或者說功能點(diǎn),都要專門寫一個(gè)Presenter類,并且由于是面向接口編程,需要增加大量接口,會有大量繁瑣的回調(diào)。
其次,由于Presenter里持有了Activity對象,所以可能會導(dǎo)致內(nèi)存泄漏或者view空指針,這也是需要注意的地方。

MVVM

  • 架構(gòu)介紹

MVVM的特點(diǎn)就是雙向綁定,并且有Google官方加持,更新了Jetpack中很多架構(gòu)組件,比如ViewModel,Livedata,DataBinding等等,所以這個(gè)是現(xiàn)在的主流框架和官方推崇的框架。

Model:數(shù)據(jù)模型,比如我們從數(shù)據(jù)庫或者網(wǎng)絡(luò)獲取數(shù)據(jù)。
View:視圖,也就是我們的xml布局文件和Activity。
ViewModel:關(guān)聯(lián)層,將Model和View綁定,使他們之間可以相互綁定實(shí)時(shí)更新

  • 模型聯(lián)系

View --> ViewModel -->View,雙向綁定,數(shù)據(jù)改動(dòng)可以反映到界面,界面的修改可以反映到數(shù)據(jù)。
ViewModel --> Model, 操作一些我們需要的數(shù)據(jù)。

  • 優(yōu)缺點(diǎn)

優(yōu)點(diǎn)就是官方大力支持,所以也更新了很多相關(guān)庫,讓MVVM架構(gòu)更強(qiáng)更好用,而且雙向綁定的特點(diǎn)可以讓我們省去很多View和Model的交互。也基本解決了上面兩個(gè)架構(gòu)的問題。

說說我理解的MVVM

先說說MVVM是怎么解決了其他兩個(gè)架構(gòu)所在的缺陷和問題:

  • 解決了各個(gè)層級之間耦合度太高的問題,也就是更好的完成了解耦。MVP層中,Presenter還是會持有View的引用,但是在MVVM中,View和Model進(jìn)行雙向綁定,從而使viewModel基本只需要處理業(yè)務(wù)邏輯,無需關(guān)系界面相關(guān)的元素了。

  • 解決了代碼量太多,或者模式化代碼太多的問題。由于雙向綁定,所以UI相關(guān)的代碼就少了很多,這也是代碼量少的關(guān)鍵。而這其中起到比較關(guān)鍵的組件就是DataBinding,使所有的UI變動(dòng)都交給了被觀察的數(shù)據(jù)模型。

  • 解決了可能會有的內(nèi)存泄漏問題。MVVM架構(gòu)組件中有一個(gè)組件是LiveData,它具有生命周期感知能力,可以感知到Activity等的生命周期,所以就可以在其關(guān)聯(lián)的生命周期遭到銷毀后自行清理,就大大減少了內(nèi)存泄漏問題。

  • 解決了因?yàn)锳ctivity停止而導(dǎo)致的View空指針問題。在MVVM中使用了LiveData,那么在需要更新View的時(shí)候,如果觀察者的生命周期處于非活躍狀態(tài)(如返回棧中的 Activity),則它不會接收任何 LiveData 事件。也就是他會保證在界面可見的時(shí)候才會進(jìn)行響應(yīng),這樣就解決了空指針問題。

  • 解決了生命周期管理問題。這主要得益于Lifecycle組件,它使得一些控件可以對生命周期進(jìn)行觀察,就能隨時(shí)隨地進(jìn)行生命周期事件。

再說說響應(yīng)式編程

響應(yīng)式編程,說白了就是我先構(gòu)建好事物之間的關(guān)系,然后就可以不用管了。他們之間會因?yàn)檫@層關(guān)系而互相驅(qū)動(dòng)。
其實(shí)也就是我們常說的觀察者模式,或者說訂閱發(fā)布模式。

為什么說這個(gè)呢,因?yàn)?code>MVVM的本質(zhì)思想就是類似這種。不管是雙向綁定,還是生命周期感知,其實(shí)都是一種觀察者模式,使所有事物變得可觀察,那么我們只需要把這種觀察關(guān)系給穩(wěn)定住,那么項(xiàng)目也就穩(wěn)健了。

最后再說說MVVM為什么這么強(qiáng)大?

我個(gè)人覺得,MVVM強(qiáng)大不是因?yàn)檫@個(gè)架構(gòu)本身,而是因?yàn)檫@種響應(yīng)式編程的優(yōu)勢比較大,再加上Google官方的大力支持,出了這么多支持的組件,來維系MVVM架構(gòu),其實(shí)也是官方想進(jìn)行項(xiàng)目架構(gòu)的統(tǒng)一。

優(yōu)秀的架構(gòu)思想+官方支持=強(qiáng)大

拜拜

有一起學(xué)習(xí)的小伙伴可以關(guān)注下??我的公眾號——碼上積木,每天三問面試真題,詳細(xì)剖析,助你成為offer收割機(jī)。

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多