1. 程式人生 > >淺談mvc、mvp、mvvm框架模式

淺談mvc、mvp、mvvm框架模式

背景:隨著軟體工業的發展,複雜的軟體沒有清晰合理的架構,很難開發和維護,於是出現了MVC框架模式

一、MVC

簡介:

MVC,是模型(model)-檢視(view)-控制器(controller)的縮寫,一種軟體設計典範,用一種業務邏輯、資料、介面顯示分離的方法組織程式碼,將業務邏輯聚集到一個部件裡面,在改進和個性化定製介面及使用者互動的同時,不需要重新編寫業務邏輯。MVC被獨特的發展起來用於對映傳統的輸入、處理和輸出功能在一個邏輯的圖形化使用者介面的結構中

資料關係:

    • View 接受使用者互動請求
    • View 將請求轉交給Controller
    • Controller 操作Model進行資料更新
    • 資料更新之後,Model通知View更新資料變化
    • View 更新變化資料
通訊方式:
所有通訊都是單向
二、MVP
簡介:
mvp的全稱為Model-View-Presenter,Model提供資料,View負責顯示,Controller/Presenter負責邏輯的處理。MVP與MVC有著一個重大的區別:在MVP中View並不直接使用Model,它們之間的通訊是通過Presenter (MVC中的Controller)來進行的,所有的互動都發生在Presenter內部,而在MVC中View會直接從Model中讀取資料而不是通過 Controller。

資料關係:

    • View 接收使用者互動請求
    • View 將請求轉交給 Presenter
    • Presenter 操作Model進行資料更新
    • Model 通知Presenter資料發生變化
    • Presenter 更新View資料

MVP的優勢:

    1. Model與View完全分離,修改互不影響
    2. 更高效地使用,因為所有的邏輯互動都發生在一個地方—Presenter內部
    3. 一個Preseter可用於多個View,而不需要改變Presenter的邏輯(因為View的變化總是比Model的變化頻繁)。
    4. 更便於測試。把邏輯放在Presenter中,就可以脫離使用者介面來測試邏輯(單元測試)
通訊方式:
各部分之間都是雙向通訊
MVC和MVP區別:
最大的一個區別就是:Model與View層之間倒底該不該通訊(甚至雙向通訊)
三、MVVM

簡介
MVVM是Model-View-ViewModel的簡寫。微軟的WPF帶來了新的技術體驗,如Silverlight、音訊、視訊、3D、動畫……,這導致了軟體UI層更加細節化、可定製化。同時,在技術層面,WPF也帶來了 諸如Binding、Dependency Property、Routed Events、Command、DataTemplate、ControlTemplate等新特性。MVVM(Model-View-ViewModel)框架的由來便是MVP(Model-View-Presenter)模式與WPF結合的應用方式時發展演變過來的一種新型架構框架。它立足於原有MVP框架並且把WPF的新特性糅合進去,以應對客戶日益複雜的需求變化。
資料關係:
    • View 接收使用者互動請求
    • View 將請求轉交給ViewModel
    • ViewModel 操作Model資料更新
    • Model 更新完資料,通知ViewModel資料發生變化
    • ViewModel 更新View資料
通訊方式:
雙向繫結。View、Model的變動,自動反映在 ViewModel,反之亦然。

MVVM優點:

1. 低耦合。View可以獨立於Model變化和修改,一個ViewModel可以繫結到不同的”View”上,當View變化的時候Model可以不變,當Model變化的時候View也可以不變。 
2. 可重用性。你可以把一些檢視邏輯放在一個ViewModel裡面,讓很多view重用這段檢視邏輯。 
3. 獨立開發。開發人員可以專注於業務邏輯和資料的開發(ViewModel),設計人員可以專注於頁面設計,生成xml程式碼。 

4. 可測試。介面素來是比較難於測試的,而現在測試可以針對ViewModel來寫。

四、MVC,MVP,MVVM三者演化

 五、總結

任何的專案框架,都是為專案服務的。沒有絕對的好壞之分,只有更合適的選擇。在專案進展的不同階段,做出最合適的調整,才是是更適合團隊專案發展的框架。專案設計者要謹記,任何的專案設計,都是要圍繞專案發展階段,團隊成員規模,和團隊整體能力而定的。切莫為了設計而設計,為了框架而框架。快速,高效的配合整個團隊進展專案,才是最合適的架構。才是一個程式設計師為成一個leader,成為一個架構師的必經之路。