天天看點

談談我對MVC MVP MVVM的了解MVCMVPMVVM

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

MVC

MVC架構模式常用于開發web應用軟體使用的。按功能分為三個層次:

M:Model(模型層):

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

V:View(視圖層)

主要用于将資料進行顯示,和UI的關系很大。view這裡可以是多個樣式的,我們知道作業系統中c++是可以跨平台的,但是UI就不可以了,如果想讓他性能好的,就一個平台一個實作,是以我們的想法是最好把他封裝起來,然後提供一個接口,一旦換一個平台操作,隻要把這一塊進行替換就可以了,這也展現了子產品化設計。

那什麼是子產品化呢?我的了解

将一個複雜的程式依舊一定的規則(規範)封裝成幾個塊(檔案)并進行組合。

子產品的内部資料的實作時私有的,隻是向外部暴露一些接口(方法)與外部其他子產品進行通信。這就是子產品化。

優點:降低代碼耦合度,減少重複代碼,提高代碼的重用性,并且在項目結構上更加清晰,便于維護。

C:Controller(控制層)

用于控制資料的變化,這一層算法比較多,用來控制資料結構。

談談我對MVC MVP MVVM的了解MVCMVPMVVM

該圖檔是在網上找到的,但是虛線一直都存在争議,網上的說法也比較模糊,這裡對虛線部分不做過多探讨,也沒有必要。隻是知道他最基本的就是單循環成環狀的即可。

說下三者之間的關系:看誰依賴于誰

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非常厚,所有邏輯都部署在那裡。
談談我對MVC MVP MVVM的了解MVCMVPMVVM

優點

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是不認識的。

軟體當中要做的一件事就是如何把視圖和邏輯進行解耦。

這種模型的好處就是:

他還支援最小知識原則,也就是迪米特法則,

談談我對MVC MVP MVVM的了解MVCMVPMVVM

這裡我們可以給他進行劃分,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查找屬性,然後更改,不用考慮太多。這樣讓業務更加專注了,隻負責自己的職責就可以了。

這是我對這幾個架構模式的了解,歡迎大家多多讨論~

繼續閱讀