mvc:
mvc中,c負責業務邏輯,完成業務邏輯以后,要求model改變狀態。在傳統
的設計中,很有可能把大量的代碼放到其中,讓mvc變成massive view controller.
究其原因,在于視圖與要求的模型不匹配,需要寫很多的代碼去獲取視圖需要的數據去填充視圖。這個時候,視圖模型這個東西就出現了。
在這幾天的nodejs+express的學習過程中,學到mvc這部分的時候,例子中運用了視圖模型這個概念,即ViewModel,剛開始對于這個新概念還是有一定誤解的,畢竟mvvm的東西也了解過一些。網上找了一些資料后發現,這樣做是借鑒mvvm設計模式,這樣抽象以后,view只接受viewmodel,controller中獲取viwemodel即可,這樣就可以有效的瘦身controller,讓其專注邏輯。這部分是在學習express中感受到的,而在以前用sails做東西的時候,其實它默認并沒有借鑒這方面的東西,但是采用了一些其他方法瘦身controller,比如從controller中拆分出service層、storage層等,對于瘦身controller也是很有效的方法。
mvvm
現階段對于mvvm的了解還停留在angular、雙向綁定這些概念,對于以后想用vue構建view,所以這方面還是有必要了解的。這部分在有空完成后端學習以后再補充吧。
ps:
另外想補充一點對于現階段express應用的組織,借鑒了sails的風格,首先將http請求封裝在route.js文件中,然后model文件存放模型,有必要的話建立viedmodel文件存放視圖模型,controller文件存放控制器,這樣做的話邏輯比較清晰,寫起來也會感覺比較舒服,因為有過一點sails項目的經驗,另外可以仿照sails的config文件夾或者新建config.js存放相關內容,這些根據實際需要配置即可。
用代碼以及圖更好地說明三者:
mv:
剛開始是把邏輯也放在view里的:
mvc:
用mvc實現上述功能:
mvp:
mvvm:
用vue作為例子:
其中,實現雙向綁定用的是數據劫持&發布-訂閱模式,在接下來的源碼學習中在詳細記錄。
參考資源:https://juejin.im/post/593021272f301e0058273468?utm_source=gold_browser_extension