談談我對MVC MVP MVVM的理解

一開始我接觸MVC和MVVM的時候很困惑,不明白他是屬於一種模式還是一種框架,通過查閱網上的一些文章依舊沒有說清楚,有的說模式,有的說框架,還有說框架模式的,也有說架構的,這就讓我更加矇蔽了,於是我請教了我的軟件工程老師,老師說“在咱們軟件工程裏說的是一種模式,當然MVC本身也是一種框架結構”,後來我和他說明了網上的幾個叫法,他說怎麼說都可以,好吧,不過我更傾向於說他是一種框架模式。

MVC

MVC框架模式常用於開發web應用軟件使用的。按功能分爲三個層次:

M:Model(模型層):

所有和數據相關的東西,可以類比於數據結構,爲什麼這說像而不是就是呢?因爲其中和數據相關的東西可以包括一些方法。

V:View(視圖層)

主要用於將數據進行顯示,和UI的關係很大。view這裏可以是多個樣式的,我們知道操作系統中c++是可以跨平臺的,但是UI就不可以了,如果想讓他性能好的,就一個平臺一個實現,所以我們的想法是最好把他封裝起來,然後提供一個接口,一旦換一個平臺操作,只要把這一塊進行替換就可以了,這也體現了模塊化設計。
那什麼是模塊化呢?我的理解
將一個複雜的程序依舊一定的規則(規範)封裝成幾個塊(文件)並進行組合。
模塊的內部數據的實現時私有的,只是向外部暴露一些接口(方法)與外部其他模塊進行通信。這就是模塊化。
優點:降低代碼耦合度,減少重複代碼,提高代碼的重用性,並且在項目結構上更加清晰,便於維護。

C:Controller(控制層)

用於控制數據的變化,這一層算法比較多,用來控制數據結構。

在這裏插入圖片描述
該圖片是在網上找到的,但是虛線一直都存在爭議,網上的說法也比較模糊,這裏對虛線部分不做過多探討,也沒有必要。只是知道他最基本的就是單循環成環狀的即可。

說下三者之間的關係:看誰依賴於誰
view需要依賴於model,就是必須把model包括進view裏面,需要完全瞭解model是啥,但是view有很多種,可以切換的,但是如果反過來,view就很難切換,相當於把view綁定到一起了,編譯的時候,換個view就需要重新編譯,顯然應該是單向的,這裏面體現了開閉原則,對擴展開放,對修改關閉。
這樣view認識model ,但是model不認識view,這樣講兩者分離了。
若是model的數據更改了,Controller發現會通知view
Model有變化了,這時候,view會取model裏重新獲得數據,接着顯示。
因爲controller需要控制數據,所以需要認識model,也就是完全依賴model,所以controller就是一套邏輯,如何操作數據的變化。
整個流程:controller控制model,model改了,view不知道,需要controller告訴更改了,然後view獲取model更改的數據。這裏產生一個疑問:爲什麼不能讓控制器直接改了數據呢?這樣就把控制器和view綁定了,view就沒有存在的意義了,而且不符合單一職責原則,所以需要用一個通知view的過程。
後期出現了controller和view可以雙向通信了,出現了按鈕,也就是用戶的輸入,可能是文字的一些東西,事件源來自按鈕,本身是控制器,而且他還存在着界面的顯示,所以既是控制器,也是view,所以就存在了雙向的關係了。

MVP

全稱:Model-View-Presenter ;MVP 是從經典的模式MVC演變而來,它們的基本思想有相通的地方 Presenter負責邏輯的處理,Model提供數據,View負責顯示。

MVP 模式將 Controller 改名爲 Presenter,同時改變了通信方向。
特點:

  1. 各部分之間的通信,都是雙向的。

  2. View 與 Model 不發生聯繫,都通過 Presenter 傳遞。

  3. View 非常薄,不部署任何業務邏輯,稱爲"被動視圖"(Passive View),即沒有任何主動性,而 Presenter非常厚,所有邏輯都部署在那裏。

在這裏插入圖片描述
優點
1、模型與視圖完全分離,我們可以修改視圖而不影響模型

2、可以更高效地使用模型,因爲所有的交互都發生在一個地方——Presenter內部

3、我們可以將一個Presenter用於多個視圖,而不需要改變Presenter的邏輯。這個特性非常的有用,因爲視圖的變化總是比模型的變化頻繁。

4、如果我們把邏輯放在Presenter中,那麼我們就可以脫離用戶接口來測試這些邏輯(單元測試)

MVP和MVC的區別:
MVC中view和model是可以直接進行訪問的,但是MVP中,不可以直接進行,需要Presenter來作爲橋樑,所有的交互在presenter中進行,這樣能夠使view和model完全獨立,修改試圖也不會影響model。

MVVM

MVVM是在MVP基礎上進一步演化過來的,只要將Presenter替換爲ViewModel 即可。
MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結合的應用方式時發展演變過來的一種新型架構框架。這種架構模式適合開發大型的軟件。
model和modelView是雙向包含
這個模式裏面沒有了控制器,所以對model層的一些控制就放在model層裏了。
如何把數據的操作體現在view上,就需要VewModel了,其實ViewModel 是model的一個代言人,就是ViewModel怎麼修改能夠體現在view上,此處是雙向連接。
總結來說view和model都認識ViewModel 但是View和Model是不認識的。

軟件當中要做的一件事就是如何把視圖和邏輯進行解耦。
這種模型的好處就是:
他還支持最小知識原則,也就是迪米特法則,

在這裏插入圖片描述
這裏我們可以給他進行劃分,model部分是程序員需要做的部分,view部分是UI設計是需要做的,其中的ViewModel就相當於接口,誰都認識,之後我們對其用到的語言進行分類。
Model部分用到的是純c++部分,viewmodel是C++/Cx
View部分用的是Xaml的語言。
我們注意到MVVM與MVP除了中間的被替換之外,還有就是多了一個binding 也就是綁定器,比如說model進行了修改,不會需要再讓ViewModel去通知view,而是viewModel自動讓view進行了更改,因爲viewModel和View進行了綁定。
所以平時寫程序,就考慮一下界面怎麼更改,把ViewModel做好就行,等程序員寫好邏輯和相關的ViewModel關聯就行,想更改view,就在ViewModel查找屬性,然後更改,不用考慮太多。這樣讓業務更加專注了,只負責自己的職責就可以了。

這是我對這幾個框架模式的理解,歡迎大家多多討論~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章