MVC模式:
MVC結(jié)構(gòu):
1.MVC(Model-View-Controller)
2.Model:對(duì)數(shù)據(jù)庫(kù)的操作、對(duì)網(wǎng)絡(luò)等的操作都應(yīng)該在Model里面處理,當(dāng)然對(duì)業(yè)務(wù)計(jì)算,變更等操作也是必須放在的該層的。
3.View:主要包括一下View及ViewGroup控件,可以是系統(tǒng)控件也可以是自定義控件。4.Controller:Android的控制層通常在Activity、Fragment之中。從Model層獲取數(shù)據(jù),將獲取到的數(shù)據(jù)綁定到view上,并且還需要監(jiān)聽用戶的輸入等操作。
本質(zhì)就是Controller操作Model層的數(shù)據(jù),并且將數(shù)據(jù)返回給View層展示。
MVC的優(yōu)點(diǎn):
1.分工明確,各司所職。
2.一定程度上降低了代碼間的耦合性。
MVC的缺點(diǎn):
1.隨著界面及其邏輯的復(fù)雜度不斷提升,Activity類的職責(zé)不斷增加,以致變得龐大臃腫。
2,視圖和控制器間過(guò)于緊密的聯(lián)系,妨礙了各自的重用。
MVP模式:
MVP結(jié)構(gòu):
1.MVP(Model-View-Presenter)
2.Model:主要提供數(shù)據(jù)的存儲(chǔ)功能。Presenter需要通過(guò)Model存取數(shù)據(jù)。
3.View: 負(fù)責(zé)處理點(diǎn)擊事件和視圖展示(Activity、Fragment或者某個(gè)View控件)
4.Presenter: View和Model之間的橋梁,從Model檢索數(shù)據(jù)后返回給View層。使得M/V之間不再有耦合關(guān)系。
MVP和MVC的區(qū)別
1.MVP中絕對(duì)不允許View直接訪問(wèn)Model
2.本質(zhì)是增加了一個(gè)接口降低一層耦合度
MVP的特點(diǎn)
1.Presenter完全將Model和View解耦,主要邏輯處于Presenter中。
2.Presenter和具體View沒(méi)有直接關(guān)聯(lián),通過(guò)定義好的接口進(jìn)行交互。
3.View變更時(shí),可以保持Presenter不變(符合面向?qū)ο缶幊痰奶攸c(diǎn))
4.View只應(yīng)該有簡(jiǎn)單的Set/Get方法、用戶輸入、界面展示的內(nèi)容,此外沒(méi)有更多內(nèi)容。
5.低耦合:Model和View的解耦,決定了該特性。
MVP的優(yōu)點(diǎn)
1.低耦合:Model、View層的變換不會(huì)影響到對(duì)方。
2.可重用性:Model層可以用于多個(gè)View。比如請(qǐng)求影視數(shù)據(jù),可能有多個(gè)頁(yè)面都需要這個(gè)功能,但是Model層代碼只要有一份就可以了。
3.方便測(cè)試:可以單獨(dú)對(duì)Model層和View層進(jìn)行測(cè)試。
MVP的缺點(diǎn)
1.MVP的中使用了接口的方式去連接view層和presenter層,如果有一個(gè)邏輯很復(fù)雜的頁(yè)面,接口會(huì)有很多,導(dǎo)致維護(hù)接口的成本非常大。
解決辦法:盡可能將一些通用的接口作為基類,其他的接口去繼承。
MVVM模式:
MVVM結(jié)構(gòu):
1.MVVM(Model-View-ViewModel),將Presenter替換為ViewModel。
2.View層就是展示數(shù)據(jù)的,以及接收到用戶的操作傳遞給viewModel層,通過(guò)dataBinding實(shí)現(xiàn)數(shù)據(jù)與view的單向綁定或雙向綁定
3.Model層最重要的作用就是獲取數(shù)據(jù)了,當(dāng)然不止于此,model層將結(jié)果通過(guò)接口的形式傳遞給viewModel層
4.ViewModel 層通過(guò)調(diào)用model層獲取數(shù)據(jù),以及業(yè)務(wù)邏輯的處理。 MVVM中 viewModel 和MVP中的presenter 的作用類似 ,只不過(guò)是通過(guò) databinding 將數(shù)據(jù)與ui進(jìn)行了綁定。
MVVM的優(yōu)點(diǎn)
1.雙向綁定技術(shù),當(dāng)Model變化時(shí),View-Model會(huì)自動(dòng)更新,View也會(huì)自動(dòng)變化。很好做到數(shù)據(jù)的一致性,不用擔(dān)心,在模塊的這一塊數(shù)據(jù)是這個(gè)值,在另一塊就是另一個(gè)值了。所以 MVVM模式有些時(shí)候又被稱作:model-view-binder模式。
2.View的功能進(jìn)一步的強(qiáng)化,具有控制的部分功能,若想無(wú)限增強(qiáng)它的功能,甚至控制器的全部功幾乎都可以遷移到各個(gè)View上(不過(guò)這樣不可取,那樣View干了不屬于它職責(zé)范圍的事情)。View可以像控制器一樣具有自己的View-Model.
3.由于控制器的功能大都移動(dòng)到View上處理,大大的對(duì)控制器進(jìn)行了瘦身。不用再為看到龐大的控制器邏輯而發(fā)愁了。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-671784.html
MVVM的缺點(diǎn)
1.數(shù)據(jù)綁定使得 Bug 很難被調(diào)試。你看到界面異常了,有可能是你 View 的代碼有 Bug,也可能是 Model 的代碼有問(wèn)題。數(shù)據(jù)綁定使得一個(gè)位置的 Bug 被快速傳遞到別的位置,要定位原始出問(wèn)題的地方就變得不那么容易了。
2.一個(gè)大的模塊中,model也會(huì)很大,雖然使用方便了也很容易保證了數(shù)據(jù)的一致性,當(dāng)時(shí)長(zhǎng)期持有,不釋放內(nèi)存,就造成了花費(fèi)更多的內(nèi)存。
3.數(shù)據(jù)雙向綁定不利于代碼重用??蛻舳碎_發(fā)最常用的重用是View,但是數(shù)據(jù)雙向綁定技術(shù),讓你在一個(gè)View都綁定了一個(gè)model,不同模塊的model都不同。那就不能簡(jiǎn)單重用View了。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-671784.html
到了這里,關(guān)于Android面試題:MVC、MVP、MVVM的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!