Web前端開發:為何選擇MVVM而非MVC


在Web中充斥着所謂的MVC框架,而在我看來,因為一些關鍵性的技術原因,MVC在Web前端開發中根本無法使用(對的,是無法,而不是不該) 。

在MVC原始報告中指出:

view永遠不會知道用戶輸入,比如鼠標操作和按鍵。

很顯然,在Web前端,你無法做到這一點,因為Web的程序中,用戶的輸入必須通過監聽窗口、文檔和元素上的事件來獲得。——而這些東西常常被認為是View。

於是一些奇怪的認識誕生了,比如認為Controller應該是View操作Model的中介。

我曾經嘗試設計一個編程模型讓所有的事件流經Controller,但是事實上我發現這樣的做法非常糟糕。——這個嘗試讓我從MVC轉向了MVVM。

John Gossman(WPF的架構師)在他的文章中提到,

Model/View/ViewModel中的View表示可見元素,按鈕,窗體,圖形或者GUI中更復雜的控件,它會對快捷鍵進行編碼,並且控件自身會管理跟輸入設備的交互——這在MVC中本該是Controller負責的(現代GUI環境中發生在Controller上的事情是很長的題外話……我傾向於認為它只是隱藏到后台了,它仍然存在,但是我們不需要像是1979年那樣考慮那么多事情了)

MVC這樣的結構的正確性在於,任何界面都需要面對一個用戶,而Controller “是用戶和系統之間的鏈接”。在經典MVC中,Controller要做的事情多數是派發用戶輸入給不同的View,並且在必要的時候從View中獲取Editor來更改Model,而Web以及絕大多數現在的UI系統中,Controller的職責已經被系統實現了。下面的圖片說明了這樣的演進過程:

總而言之,對於MVC

  • 為1979年的SmallTalk設計 
  • 界面和程序都由同一種語言編寫
  • 用戶輸入完全由程序編寫者來處理
  • View是單純用於顯示

對於MVVM

  • 為2005年的WPF設計 
  • 界面多使用標記語言,程序則使用編程語言
  • 用戶輸入經過UI系統底層處理和分發,多數以事件的形式被用戶程序所知
  • View具有獨立性,能夠管理部分用戶輸入並且自行反應(它們常常被稱作控件,而非視圖)

作為一個Web開發者,在二者之間做出何種選擇是顯而易見的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM