成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

開發 前端
MVC全名是Model--View--Controller,是模型(model)-視圖(view)-控制器(controller)的縮寫,一種軟件設計典范,用一種業務邏輯、數據、界面顯示分離的方法組織代碼,在改進和個性化定制界面及用戶交互的同時,不需要重新編寫業務邏輯。

MVC

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

一篇文章讓你徹底了解 MVC、MVP 、MVVM

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

看似沒有什么特別的地方,但是由幾個需要特別關注的關鍵點:

View是把控制權交移給Controller,自己不執行業務邏輯。

Controller執行業務邏輯并且操作Model,但不會直接操作View,可以說它是對View無知的。

View和Model的同步消息是通過觀察者模式進行,而同步操作是由View自己請求Model的數據然后對視圖進行更新。

MVC的優缺點

優點:

把業務邏輯全部分離到Controller中,模塊化程度高。當業務邏輯變更的時候,不需要變更View和Model,只需要Controller 換成另外一個Controller就行了(Swappable Controller)。

觀察者模式可以做到多視圖同時更新。

缺點:

Controller測試困難。因為視圖同步操作是由View自己執行,而View只能在有UI的環境下運行。在沒有UI環境下對Controller進行單元測試的時候, Controller業務邏輯的正確性是無法驗證的:Controller更新Model的時候,無法對View的更新操作進行斷言。

View無法組件化。View是強依賴特定的Model的,如果需要把這個View抽出來作為一個另外一個應用程序可復用的組件就困難了。因為不同程序的的Domain Model是不一樣的

MVP

MVP其實是MVC的一種演進版本,它更簡單,將MVC中的Controller改為了Presenter,View通過接口與Presenter進行交互,降低耦合,方便進行單元測試。

View:負責繪制UI元素、與用戶進行交互(Activity、View、Fragment都可以做為View層);

Model:對數據的操作、對網絡等的操作,和業務相關的邏輯處理;

Presenter:作為View與Model交互的中間紐帶,處理與用戶交互的邏輯。可以把Presenter理解為一個中間層的角色,它接受Model層的數據,并且處理之后傳遞給View層,還需要處理View層的用戶交互等操作。

一篇文章讓你徹底了解 MVC、MVP 、MVVM

關鍵點:

View不再負責同步的邏輯,而是由Presenter負責。Presenter中既有業務邏輯也有同步邏輯。

View需要提供操作界面的接口給Presenter進行調用。(關鍵)

對比在MVC中,Controller是不能操作View的,View也沒有提供相應的接口;而在MVP當中,Presenter可以操作View,View需要提供一組對界面操作的接口給Presenter進行調用;Model仍然通過事件廣播自己的變更,但由Presenter監聽而不是View。

MVP(Passive View)的優缺點

優點:

便于測試。Presenter對View是通過接口進行,在對Presenter進行不依賴UI環境的單元測試的時候。可以通過Mock一個View對象,這個對象只需要實現了View的接口即可。然后依賴注入到Presenter中,單元測試的時候就可以完整的測試Presenter業務邏輯的正確性。

View可以進行組件化。在MVP當中,View不依賴Model。這樣就可以讓View從特定的業務場景中脫離出來,可以說View可以做到對業務邏輯完全無知。它只需要提供一系列接口提供給上層操作。這樣就可以做高度可復用的View組件。

缺點:

Presenter中除了業務邏輯以外,還有大量的View->Model,Model->View的手動同步邏輯,造成Presenter比較笨重,維護起來會比較困難。

MVVM

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

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

一篇文章讓你徹底了解 MVC、MVP 、MVVM

MVVM的調用關系

MVVM的調用關系和MVP一樣。但是,在ViewModel當中會有一個叫Binder,或者是Data-binding engine的東西。以前全部由Presenter負責的View和Model之間數據同步操作交由給Binder處理。你只需要在View的模版語法當中,指令式地聲明View上的顯示的內容是和Model的哪一塊數據綁定的。當ViewModel對進行Model更新的時候,Binder會自動把數據更新到View上去,當用戶對View進行操作(例如表單輸入),Binder也會自動把數據更新到Model上去。這種方式稱為:Two-way data-binding,雙向數據綁定。可以簡單而不恰當地理解為一個模版引擎,但是會根據數據變更實時渲染。

關鍵點:

MVVM把View和Model的同步邏輯自動化了。以前Presenter負責的View和Model同步不再手動地進行操作,而是交由框架所提供的Binder進行負責。

只需要告訴Binder,View顯示的數據對應的是Model哪一部分即可。

MVVM的優缺點

優點:

提高可維護性。解決了MVP大量的手動View和Model同步的問題,提供雙向綁定機制。提高了代碼的可維護性。

簡化測試。因為同步邏輯是交由Binder做的,View跟著Model同時變更,所以只需要保證Model的正確性,View就正確。大大減少了對View同步更新的測試。

缺點:

過于簡單的圖形界面不適用,或說牛刀殺雞。

對于大型的圖形應用程序,視圖狀態較多,ViewModel的構建和維護的成本都會比較高。

數據綁定的聲明是指令式地寫在View的模版當中的,這些內容是沒辦法去打斷點debug的。

結語

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

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-08-09 08:00:55

AWS安全API

2023-07-28 07:14:13

2020-10-09 08:15:11

JsBridge

2022-08-03 08:41:30

客戶端操作并發請求

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺

2023-09-06 14:57:46

JavaScript編程語言

2020-12-08 08:09:49

SVG圖標Web

2021-05-18 08:30:42

JavaScript 前端JavaScript時

2021-06-24 09:05:08

JavaScript日期前端

2021-09-27 09:18:30

ListIterato接口方法

2021-01-26 23:46:32

JavaScript數據結構前端

2021-03-05 18:04:15

JavaScript循環代碼

2021-03-09 14:04:01

JavaScriptCookie數據

2024-04-19 14:23:52

SwitchJavaScript開發

2023-07-30 15:18:54

JavaScript屬性

2021-02-26 20:01:57

SVG濾鏡元素

2023-05-08 08:21:15

JavaNIO編程

2024-01-30 13:47:45

2020-11-10 10:48:10

JavaScript屬性對象
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲成人精品免费 | www.日日操 | 欧美精品一区二区蜜桃 | 欧美一二区 | 欧美1区 | 亚洲欧美综合 | 免费看大片bbbb欧美 | 国产剧情久久 | 久久久久无码国产精品一区 | 久久91精品国产 | 中文字幕免费观看 | 一区二区三区电影在线观看 | 国产激情片在线观看 | 91玖玖| 伊人亚洲 | 国产精品成人一区二区三区 | 久久看看| 2018国产大陆天天弄 | 日韩成人免费中文字幕 | 欧美黄色一区 | 一区二区三区四区电影视频在线观看 | 欧美日韩网站 | 天天操夜夜操 | 先锋资源站 | 狠狠狠干 | 国产精品视频一区二区三区不卡 | 亚洲国产精品一区 | 狠狠色狠狠色综合系列 | 狠狠艹| 精品自拍视频 | 中文字幕在线免费 | ririsao久久精品一区 | 91av视频| 国产激情亚洲 | 日韩精品免费视频 | av网站免费观看 | 91精品国产91久久久久久 | 日韩精品一区二区三区在线观看 | 国产三级一区二区三区 | 日韩综合在线 | 精品久久香蕉国产线看观看亚洲 |