1. 程式人生 > >MVC模式與MVVM模式詳解

MVC模式與MVVM模式詳解

對於很多程式設計的初學者來說,MVC 的設計理念和 MVVM 的設計理念難以掌握,因為很多在初學階段的人,沒有經歷大型專案開發的經驗,更沒有對程式設計的工程化體系的發展及歷史進行過研究,更是少有人提及程式設計工程化的概念。

MVC模式

 

MVC設計模式的出現,在一定程度上依賴於另外一項關鍵技術的成熟,就是模板引擎,如常見的jsp頁面和php頁面;其實模板引擎技術並不複雜,而是繁瑣,基本原理就是前端HTML中寫關鍵字元以期承載資料,然後再交由後臺將前端HTML程式碼中的關鍵字元進行匹配,替換為真實資料;模板引擎的關鍵點並不是技術,而是在一定程度上解脫了後臺程式設計師,他們不再寫頁面和JS指令碼了,這些工作大部分交給專業的前端工程師來完成,後臺只需要在頁面完成後讀取並交由模板引擎進行二次處理即可;這基本就實現了程式碼工程的分離;而且MVC的設計模式也是相對靈活的,對於小型技術團隊來說,C層與M層的分離其實並不徹底,邏輯與資料之間的處理大部分情況下依然交與後臺完成,邏輯層與資料層僅僅實現了程式碼邏輯上的分離,並沒有實現工程上的分離。

MVC模式向MVVM模式的發展過程

目前依然有大量專案在使用MVC的設計模式進行專案開發,而隨著移動網際網路的發展,MVC 設計模式的最大BUG也凸顯出來,它沒有從正真意義上實現前後端的分離,而是淺層次的實現了前後端工程上的分離,也就是後臺程式設計師不寫頁面程式碼而已;這種模式,對於移動端裝置,完全失去了意義,相同的業務邏輯和資料處理,pc端需要一套程式碼,針對移動裝置又需要另外一套程式碼,工程量翻倍不止。在MVC的發展道路上,也有人試圖突破這種模式已期解決MVC的BUG,但歷史證明是不成熟的。實現方式就是不使用模板引擎,從伺服器獲取靜態頁面後,使用大量的ajax獲取資料並更新到頁面,這種做法,確實實現了前後端工程及資料的徹底分離,為前端工程化的發展提供了關鍵性思路設想,但它最大的BUG就是需要前端程式設計師大量且繁瑣的操作DOM已向用戶展示資料,痛苦不堪,如果你做過不使用MVVM框架但前後端完全分離的專案,一定會深有體會。雖然 jQuery 從一定程度上減緩了這種痛苦,但這並不能令人滿意。但是這種設計思想是對前端工程化發展具有歷史性意義的,它促使了MVVM模式的出現。

MVVM模式

 

其實 MVVM的設計,本質上就是解決了前端程式設計師大量繁瑣的操作DOM的問題,資料的請求獲取依然依賴於Ajax技術,但是,資料獲取後的展示,不再是操作DOM,而是交由中間的VM層來處理;前端有了MVVM的設計思想後,終於實現了前後端工程及資料的徹底分離,而這種設計思想,目前也大量應用於各種新專案的開發,於是各種前端框架如雨後春筍般拔地而起,前端的MVVM三大框架就是典型代表。

前端有了資料處理及展示的獨立能力後,後臺就可以只針對資料邏輯進行處理了,而這樣的後臺資料服務設計,不僅適用為網站開發提供資料支援,更適用於為移動端提供資料支援,後臺不再需要關心資料展示的問題,也因此有更多的精力來處理併發請求及複雜的資料庫 I\O 等問題,後臺也不再需要模板引擎技術,後臺 MVC 就變成了 MC 。

也因為有了對MVVM設計實現的這些框架,使前端工程師才有了應有的程式設計地位,不再是一個縮在角落裡聽從後臺程式設計師指揮的小角色,大量新專案的開發需要更多的前端工程師,而前端開發也走向了正規的工程化設計開發,目前各大公司對前端程式設計師的大量需求也得益於此,當然前端工程師的收入也是水漲船高。