日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網(wǎng)為廣大站長(zhǎng)提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

一個(gè)人善于使用模式,相當(dāng)于把一些特定問題進(jìn)行了抽象概括,大腦其實(shí)可以騰出更大的空間處理別的事情(具體的業(yè)務(wù)等)。所以,這一兩年我也比較喜歡嘗試使用一些流行的模式或者開源框架到自己的項(xiàng)目中,最終不一定會(huì)投入使用,但嘗試的過程還是很有益處的。今天我們就把開發(fā)當(dāng)中常用的模式簡(jiǎn)單介紹一下。來(lái)小可愛,上車吧!

MVC

MVC全名是Model--View--Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設(shè)計(jì)典范,用一種業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離的方法組織代碼,在改進(jìn)和個(gè)性化定制界面及用戶交互的同時(shí),不需要重新編寫業(yè)務(wù)邏輯。其中Model層處理數(shù)據(jù),業(yè)務(wù)邏輯等;View層處理界面的顯示結(jié)果;Controller層起到橋梁的作用,來(lái)控制View層和Model層通信以此來(lái)達(dá)到分離視圖顯示和業(yè)務(wù)邏輯層。

一篇文章幫你了解 MVC、MVP 、MVVM

 

我們往往把Android中界面部分的實(shí)現(xiàn)也理解為采用了MVC框架,常常把Activity理解為MVC模式中的Controller。

看似沒有什么特別的地方,但是由幾個(gè)需要特別關(guān)注的關(guān)鍵點(diǎn):

  1. View是把控制權(quán)交移給Controller,自己不執(zhí)行業(yè)務(wù)邏輯。
  2. Controller執(zhí)行業(yè)務(wù)邏輯并且操作Model,但不會(huì)直接操作View,可以說它是對(duì)View無(wú)知的。
  3. View和Model的同步消息是通過觀察者模式進(jìn)行,而同步操作是由View自己請(qǐng)求Model的數(shù)據(jù)然后對(duì)視圖進(jìn)行更新。

MVC的優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):
  1. 把業(yè)務(wù)邏輯全部分離到Controller中,模塊化程度高。當(dāng)業(yè)務(wù)邏輯變更的時(shí)候,不需要變更View和Model,只需要Controller 換成另外一個(gè)Controller就行了(SwAppable Controller)。
  2. 觀察者模式可以做到多視圖同時(shí)更新。
  • 缺點(diǎn):
  1. Controller測(cè)試?yán)щy。因?yàn)橐晥D同步操作是由View自己執(zhí)行,而View只能在有UI的環(huán)境下運(yùn)行。在沒有UI環(huán)境下對(duì)Controller進(jìn)行單元測(cè)試的時(shí)候, Controller業(yè)務(wù)邏輯的正確性是無(wú)法驗(yàn)證的:Controller更新Model的時(shí)候,無(wú)法對(duì)View的更新操作進(jìn)行斷言。
  2. View無(wú)法組件化。View是強(qiáng)依賴特定的Model的,如果需要把這個(gè)View抽出來(lái)作為一個(gè)另外一個(gè)應(yīng)用程序可復(fù)用的組件就困難了。因?yàn)椴煌绦虻牡腄omain Model是不一樣的

MVP

MVP其實(shí)是MVC的一種演進(jìn)版本,它更簡(jiǎn)單,將MVC中的Controller改為了Presenter,View通過接口與Presenter進(jìn)行交互,降低耦合,方便進(jìn)行單元測(cè)試。

  • View:負(fù)責(zé)繪制UI元素、與用戶進(jìn)行交互(Activity、View、Fragment都可以做為View層);
  • Model:對(duì)數(shù)據(jù)的操作、對(duì)網(wǎng)絡(luò)等的操作,和業(yè)務(wù)相關(guān)的邏輯處理;
  • Presenter:作為View與Model交互的中間紐帶,處理與用戶交互的邏輯??梢园裀resenter理解為一個(gè)中間層的角色,它接受Model層的數(shù)據(jù),并且處理之后傳遞給View層,還需要處理View層的用戶交互等操作。
一篇文章幫你了解 MVC、MVP 、MVVM

 

關(guān)鍵點(diǎn):

  1. View不再負(fù)責(zé)同步的邏輯,而是由Presenter負(fù)責(zé)。Presenter中既有業(yè)務(wù)邏輯也有同步邏輯。
  2. View需要提供操作界面的接口給Presenter進(jìn)行調(diào)用。(關(guān)鍵)

對(duì)比在MVC中,Controller是不能操作View的,View也沒有提供相應(yīng)的接口;而在MVP當(dāng)中,Presenter可以操作View,View需要提供一組對(duì)界面操作的接口給Presenter進(jìn)行調(diào)用;Model仍然通過事件廣播自己的變更,但由Presenter監(jiān)聽而不是View。

MVP(Passive View)的優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):
  1. 便于測(cè)試。Presenter對(duì)View是通過接口進(jìn)行,在對(duì)Presenter進(jìn)行不依賴UI環(huán)境的單元測(cè)試的時(shí)候。可以通過Mock一個(gè)View對(duì)象,這個(gè)對(duì)象只需要實(shí)現(xiàn)了View的接口即可。然后依賴注入到Presenter中,單元測(cè)試的時(shí)候就可以完整的測(cè)試Presenter業(yè)務(wù)邏輯的正確性。
  2. View可以進(jìn)行組件化。在MVP當(dāng)中,View不依賴Model。這樣就可以讓View從特定的業(yè)務(wù)場(chǎng)景中脫離出來(lái),可以說View可以做到對(duì)業(yè)務(wù)邏輯完全無(wú)知。它只需要提供一系列接口提供給上層操作。這樣就可以做高度可復(fù)用的View組件。
  • 缺點(diǎn):
  1. Presenter中除了業(yè)務(wù)邏輯以外,還有大量的View->Model,Model->View的手動(dòng)同步邏輯,造成Presenter比較笨重,維護(hù)起來(lái)會(huì)比較困難。

MVVM

MVVM模式(Model--View--ViewModel模式),和MVP模式相比,MVVM 模式用ViewModel替換了Presenter ,其他層基本上與 MVP 模式一致,ViewModel可以理解成是View的數(shù)據(jù)模型和Presenter的合體。

MVVM采用雙向綁定(data-binding):View的變動(dòng),自動(dòng)反映在ViewModel,反之亦然,這種模式實(shí)際上是框架替應(yīng)用開發(fā)者做了一些工作(相當(dāng)于ViewModel類是由庫(kù)幫我們生成的),開發(fā)者只需要較少的代碼就能實(shí)現(xiàn)比較復(fù)雜的交互。

一篇文章幫你了解 MVC、MVP 、MVVM

 

MVVM的調(diào)用關(guān)系

MVVM的調(diào)用關(guān)系和MVP一樣。但是,在ViewModel當(dāng)中會(huì)有一個(gè)叫Binder,或者是Data-binding engine的東西。以前全部由Presenter負(fù)責(zé)的View和Model之間數(shù)據(jù)同步操作交由給Binder處理。你只需要在View的模版語(yǔ)法當(dāng)中,指令式地聲明View上的顯示的內(nèi)容是和Model的哪一塊數(shù)據(jù)綁定的。當(dāng)ViewModel對(duì)進(jìn)行Model更新的時(shí)候,Binder會(huì)自動(dòng)把數(shù)據(jù)更新到View上去,當(dāng)用戶對(duì)View進(jìn)行操作(例如表單輸入),Binder也會(huì)自動(dòng)把數(shù)據(jù)更新到Model上去。這種方式稱為:Two-way data-binding,雙向數(shù)據(jù)綁定。可以簡(jiǎn)單而不恰當(dāng)?shù)乩斫鉃橐粋€(gè)模版引擎,但是會(huì)根據(jù)數(shù)據(jù)變更實(shí)時(shí)渲染。

關(guān)鍵點(diǎn):

MVVM把View和Model的同步邏輯自動(dòng)化了。以前Presenter負(fù)責(zé)的View和Model同步不再手動(dòng)地進(jìn)行操作,而是交由框架所提供的Binder進(jìn)行負(fù)責(zé)。

只需要告訴Binder,View顯示的數(shù)據(jù)對(duì)應(yīng)的是Model哪一部分即可。

MVVM的優(yōu)缺點(diǎn)

  • 優(yōu)點(diǎn):
  1. 提高可維護(hù)性。解決了MVP大量的手動(dòng)View和Model同步的問題,提供雙向綁定機(jī)制。提高了代碼的可維護(hù)性。
  2. 簡(jiǎn)化測(cè)試。因?yàn)橥竭壿嬍墙挥葿inder做的,View跟著Model同時(shí)變更,所以只需要保證Model的正確性,View就正確。大大減少了對(duì)View同步更新的測(cè)試。
  • 缺點(diǎn):
  1. 過于簡(jiǎn)單的圖形界面不適用,或說牛刀殺雞。
  2. 對(duì)于大型的圖形應(yīng)用程序,視圖狀態(tài)較多,ViewModel的構(gòu)建和維護(hù)的成本都會(huì)比較高。
  3. 數(shù)據(jù)綁定的聲明是指令式地寫在View的模版當(dāng)中的,這些內(nèi)容是沒辦法去打斷點(diǎn)debug的。

結(jié)語(yǔ)

可以看到,從MVC->MVP->MVVM,就像一個(gè)打怪升級(jí)的過程。后者解決了前者遺留的問題,把前者的缺點(diǎn)優(yōu)化成了優(yōu)點(diǎn)。同樣的Demo功能,代碼從最開始的一堆文件,優(yōu)化成了最后只需要20幾行代碼就完成。MV*模式之間的區(qū)分還是蠻清晰的,希望可以給對(duì)這些模式理解比較模糊的同學(xué)帶來(lái)一些參考和思路。

作者:夏尼采原文來(lái)自:簡(jiǎn)書

分享到:
標(biāo)簽:MVC
用戶無(wú)頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫(kù),初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績(jī)?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績(jī)?cè)u(píng)定