以知乎为例子来说明MVC是个啥
????????記得當(dāng)時(shí)了解Web開(kāi)發(fā)的MVC(Model-View-Controller)模式后,有一種心血噴涌的感覺(jué),覺(jué)得太有意思了(程序員別噴,我就是這么沒(méi)見(jiàn)過(guò)世面)。我們以知乎為例子來(lái)說(shuō)明MVC是個(gè)啥:
????????每個(gè)人的主頁(yè)都是相同的布局和風(fēng)格,例如最上面的菜單搜索欄,顏色分割,左邊顯示動(dòng)態(tài)等,右邊是個(gè)人信息等,然后具體的內(nèi)容卻因人而異—每個(gè)人的頭像,名字,動(dòng)態(tài)都是不一樣的。那么知乎是如何保證每一個(gè)人看到的都是自己的主頁(yè)呢?
????????你可以把這個(gè)相同的布局想象成一個(gè)模板,里面有一個(gè)個(gè)空格子,當(dāng)你用你的賬戶(hù)登陸頁(yè)面時(shí),想象你的電腦里有無(wú)數(shù)個(gè)小人根據(jù)你的賬號(hào)從知乎后臺(tái)的數(shù)據(jù)庫(kù)里取出你的頭像,動(dòng)態(tài),認(rèn)證信息等等內(nèi)容,然后對(duì)應(yīng)著模板上規(guī)定好的位置,把對(duì)應(yīng)的內(nèi)容填進(jìn)去。這些小人的動(dòng)作實(shí)在是太快了,以至于你覺(jué)得這是在瞬間完成的。
????????上面所說(shuō)的模板就是MVC中的V,是View的縮寫(xiě),負(fù)責(zé)顯示。這樣做的好處在于,如果知乎有一天突然想改變一下個(gè)人主頁(yè)的風(fēng)格,那么只需要改變這一個(gè)模板,然后幾千萬(wàn)注冊(cè)用戶(hù)的主頁(yè)就相應(yīng)的變化了,因?yàn)槟0迨枪玫?#xff0c;是不是省了很多事情?(早期的Web開(kāi)發(fā)可不是這樣喲,你可能要一個(gè)個(gè)用戶(hù)去改,非常麻煩。)
????????而這些小人除了擺放內(nèi)容,它們真正負(fù)責(zé)的是業(yè)務(wù)邏輯,我們把他們叫做Controller,也就是MVC中的C。例如當(dāng)你登陸的時(shí)候,這些小人要檢查你的用戶(hù)名是不是準(zhǔn)確的,如果準(zhǔn)確,它們要去數(shù)據(jù)庫(kù)里取出你請(qǐng)求的信息等,如果用戶(hù)名錯(cuò)誤,它們要攔截住你的登陸。它們的職責(zé)還有很多,無(wú)法一一列舉。在實(shí)際中,這些小人做的事情其實(shí)就是Python(或者其它腳本語(yǔ)言)做的事情。
????????最后,MVC中的Model其實(shí)就是傳給View的數(shù)據(jù),包括上面的頭像,用戶(hù)名,動(dòng)態(tài)等因人而異的數(shù)據(jù)。這些數(shù)據(jù)在知乎服務(wù)器上是以數(shù)據(jù)庫(kù)表格(table)的形式存在的,你可以把它們想象成很多不同的excel表格,不同的表格儲(chǔ)存著不同的信息,有些記錄著知乎用戶(hù)的個(gè)人信息,有些記錄著回答,有些記錄著評(píng)論等等,而這些表格之間又彼此聯(lián)系,當(dāng)你在知乎的不同網(wǎng)頁(yè)間跳轉(zhuǎn)的時(shí)候,上面說(shuō)的那些小人就根據(jù)你的要求,組合對(duì)應(yīng)的表格取出對(duì)應(yīng)的數(shù)據(jù),然后把他們放到模板對(duì)應(yīng)的空格里,發(fā)送給瀏覽器。然后瀏覽器根據(jù)你寫(xiě)的CSS,用不同的顏色,大小等等,將數(shù)據(jù)很漂亮的顯示出來(lái)。
????????這樣做的好處是什么呢?雖然你最終在瀏覽器里看到的是一個(gè)完整的頁(yè)面,但是在后端邏輯上它們都是區(qū)分開(kāi)的——模型(M),視圖(V)和控制器(C)的區(qū)分就保證了較高的可維護(hù)性——我可以隨時(shí)修改主頁(yè)的顯示并看到效果,同樣我可以隨時(shí)加入一些業(yè)務(wù)邏輯。
????? ? 簡(jiǎn)單來(lái)說(shuō),MVC指Controller控制器根據(jù)不同情況獲取Model數(shù)據(jù),處理后傳給View模板進(jìn)行顯示。
作者:賽門(mén)喵Simon
鏈接:https://www.zhihu.com/question/29138020/answer/141170242
來(lái)源:知乎
總結(jié)
以上是生活随笔為你收集整理的以知乎为例子来说明MVC是个啥的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 冒泡排序详解--python
- 下一篇: 深拷贝的三种方式