MVC模式和MVVM模式都很熟悉凯傲,結(jié)構(gòu)啊盘寡,用法啊都很了解,工作中也都有用到(就是在別人寫好的架構(gòu)里添東西而已)但是總覺得沒有得到兩個模式的精髓哮兰。
最近在想CS/BS架構(gòu),突然感覺多明白點了苟弛。MVC其實是給BS架構(gòu)用的喝滞,而MVVM是給CS架構(gòu)用的。從MVC模式來源于網(wǎng)站架構(gòu)膏秫,而MVVM起自于WPF也能看出來右遭。
M都是指model,或者說DTO對象,對于這兩個模式都一樣窘哈,沒有區(qū)別吹榴。
VIEW就有些區(qū)別了,在MVC中滚婉,主要是指靜態(tài)的頁面(UI)图筹,由模板引擎來生成的網(wǎng)頁(也可以是別的,只要對方能渲染出來)让腹,而MVVM中的VIEW則是一個動態(tài)的東西远剩,它由VM控制來呈現(xiàn)不同的效果。VM主要通過雙向綁定來實現(xiàn)影響VIEW骇窍,主動權(quán)在VIEW上面瓜晤。MVVM中 VIEE的編寫是聲明式的寫法,而不是命令式(imperative)的方式腹纳。
controller和viewmodel區(qū)別就大了痢掠,Controller可以理解為無狀態(tài)的一個個命令,安裝輸入條件只估,找出model志群,生成VIEW,返回前端蛔钙,特別適合無狀態(tài)的http請求。(session/cookie等讓應(yīng)用有狀態(tài)的方式荠医,都是外在的吁脱,并不是MVC模式的本質(zhì),簡單的來說彬向,mvc網(wǎng)可以輸入URL直接調(diào)用某個Controller)
而VIEWMODEL則可以理解為一個狀態(tài)機(jī)兼贡,外在條件改變內(nèi)部狀態(tài)就改變,Commond則用來處理一些任務(wù)娃胆。因為VM是有狀態(tài)的遍希,所以采用MVVM模式的SPA應(yīng)用基本上不能通過URL訪問某個特定頁面。
所以MVC就是給瘦客戶端用的里烦,它擅長處理無狀態(tài)的任務(wù)凿蒜,而MVVM是給胖客戶端用的,它是有狀態(tài)的胁黑。