為什麼前端模型-檢視-控制器MVC會死?

banq發表於2016-10-23

越來越越多的前端開發人員採用React.js+Redux這樣的單向架構,因此,經典的模型檢視控制器MVC模式未來會怎麼樣呢?

那我們先回顧一下前期架構的發展。在過去的四年中,我一直在大量的Web專案中花費了大量時間設計前端和整合框架。在2010年以前javascript都是使用JQuery。自此以後,開發人員開始考慮使用單頁應用。Backbone和Knockout開始流行。

那時這些框架許多原理還是相當新的,所以設計者得從其他地方尋找來靈感,他們從伺服器後端借用了最佳實踐。當react.js首次出現的時候,很多開發人員嘲笑它,因為它的一些行為在處理html和javascript時是反直覺的。但是他們忽略了react的重要貢獻,就是帶來了基於元件的架構。

react並沒有發明元件,而是把這一想法深入下去。

這一突破的想法卻被facebook忽視了,所以他們宣傳react時,還是把它作為mvc的v。

2015年帶來了思想上面的重要突破從熟悉的mvc模式到單向架構和資料流。這是Flux和函式反映式程式設計,如Redux和RxJS。那麼,mvc問題出現在哪裡呢?

mvc仍然是伺服器端好的框架,m v c在伺服器端和客戶端原理不同。

m v c的檢視和控制器在伺服器端是可以完全分離的,兩者通過請求和響應聯絡。但是檢視和控制器如果都在客戶端,沒有了請求和響應這樣一進一出方向性的物件,只有一個事件,而且事件是可以雙向進出,造成混亂,檢視與控制器兩者通過這些混亂的雙向事件直接耦合在一起,控制器既處理介面事件,又處理業務邏輯,而模型要處理介面狀態和應用狀態,這些都違背了單一職責。

而react.js的flux事件單向流程簡化雙向事件的無序,使得資料流向變得清晰,再加上Redux將業務邏輯和應用狀態從中分離,這樣,應用狀態業務邏輯和介面狀態,事件處理以及檢視都變成單獨分離的元件,基於元件架構在前端客戶端替代了MVC。

Is Model-View-Controller dead on the front end?

相關文章