MVC原本是存在於Desktop程序中的,M是指數據模型,V是指用戶界面,C則是控制器。使用MVC的目的是將M和V的實現代碼 分離,從而使同一個程序可使用不一樣的表現形式。好比一批統計數據你能夠分別用柱狀圖、餅圖來表示。C存在的目的則是確保M和V的同步,一旦M改變,V應 該同步更新。 數據庫
JAVA中的MVC 服務器
JAVA把MVC引入了Web領域,並在此基礎上架構出了一套稱爲Model2的體系。因爲Web的特殊性,JAVA中的 MVC和Desktop中的MVC並不徹底一致。主要緣由是Web中的V不是持續的,用戶每訪問一次,V就要從新生成一次,因此V始終是和M一致的,不需 要C來控制同步。那麼 JAVA中的C在幹什麼?JAVA中的C一般用於流程的轉向,其實用的是Dispatch模式,再也不是Desktop中的C了。 cookie
PHP中的MVC
要在PHP中原封不動的COPY JAVA的MVC是不可能的。問題主要表如今M上,在JAVA中,M是獨立於業務邏輯和表現邏輯的數據模型,在服務器端跨頁面存在,JAVA Bean扮演的就是這個腳色。而PHP進程並不長時間駐留於內存,只在PHP頁面開始執行時建立,在頁面解釋執行結束時就已經結束。在這樣的狀況下,咱們 根本沒法直接實現M。因此全部聲稱實現了MVC模式的PHP程式都只能經過模擬手段來實現M。實現的方式通常是在當前頁面結束前把數據存入數據庫或者 cookie/session,在下一個頁面中再透過數據庫或者cookie/session重建M。這樣的方式和JAVA中的Bean比起來能夠說是開 銷巨大,原本往內存中寫數據的簡單操做如今要從服務器端傳到客戶端或者數據庫,而後再傳回來。與其用這麼大的開銷來維護一個數據模型再在最後把這個模型塞 回數據庫,還不如直接根據須要更新數據庫裏邊的數據。
如今PHP中的MVC架構能夠用下圖來表示。 session
然 後咱們再來看V。如今不少PHP程序簡單的使用了一些模板技術就在說明中寫「採用MVC架構」。其實絕大多數的PHP模板程序都只是分離HTML 和PHP的,而非MVC強調的顯示邏輯和業務邏輯分離。一個混用HTML和PHP的頁面同樣能夠是MVC的一部份。如何分離顯示邏輯和業務邏輯至今沒有一 個滿意的方案。我我的則比較認同實現方案。至於C,和JAVA中差很少,仍是被用做轉向,這個在PHP中其實並不重要。 架構