91亚洲精华国内精华精华液_国产高清在线精品一区不卡_精品特级一级毛片免费观看_欧美日韩中文制服有码_亚洲精品无码你懂的网站369

近來(lái)設(shè)計(jì)模式風(fēng)行,MVC隨處可見(jiàn),PHP領(lǐng)域也不例外,很多論壇都開(kāi)始討論在PHP中使用MVC。然而,M、V、C在PHP中到底該如何實(shí)現(xiàn)?MVC真的適合PHP么?這里Easy給出一些自己的思考。

MVC的原型

MVC本來(lái)是存在于Desktop程序中的,M是指數(shù)據(jù)模型,V是指用戶(hù)界面,C則是控制器。使用MVC的目的是將M和V的實(shí)現(xiàn)代碼分離,從而使同 一個(gè)程序可以使用不同的表現(xiàn)形式。比如一批統(tǒng)計(jì)數(shù)據(jù)你可以分別用柱狀圖、餅圖來(lái)表示。C存在的目的則是確保M和V的同步,一旦M改變,V應(yīng)該同步更新。

JAVA中的MVC

JAVA把MVC引入了Web領(lǐng)域,并在此基礎(chǔ)上架構(gòu)出了一套稱(chēng)為Model2的體系。由于Web的特殊性,JAVA中的MVC和Desktop中 的MVC并不完全一致。主要原因是Web中的V不是持續(xù)的,用戶(hù)每訪(fǎng)問(wèn)一次,V就要重新生成一次,所以V始終是和M一致的,不需要C來(lái)控制同步。那么 JAVA中的C在干什么?JAVA中的C通常用于流程的轉(zhuǎn)向,其實(shí)用的是Dispatch模式,不再是Desktop中的C了。

 

PHP中的MVC

要在PHP中原封不動(dòng)的COPY JAVA的MVC是不可能的。問(wèn)題主要表現(xiàn)在M上,在JAVA中,M是獨(dú)立于業(yè)務(wù)邏輯和表現(xiàn)邏輯的數(shù)據(jù)模型,在服務(wù)器端跨頁(yè)面存在,JAVA Bean扮演的就是這個(gè)腳色。而PHP進(jìn)程并不長(zhǎng)時(shí)間駐留于內(nèi)存,只在PHP頁(yè)面開(kāi)始執(zhí)行時(shí)創(chuàng)建,在頁(yè)面解釋執(zhí)行結(jié)束時(shí)就已經(jīng)結(jié)束。在這樣的情況下,我們 根本無(wú)法直接實(shí)現(xiàn)M。所以所有聲稱(chēng)實(shí)現(xiàn)了MVC模式的PHP程式都只能通過(guò)模擬手段來(lái)實(shí)現(xiàn)M。實(shí)現(xiàn)的方式一般是在當(dāng)前頁(yè)面結(jié)束前把數(shù)據(jù)存入數(shù)據(jù)庫(kù)或者 cookie/session,在下一個(gè)頁(yè)面中再透過(guò)數(shù)據(jù)庫(kù)或者cookie/session重建M。這樣的方式和JAVA中的Bean比起來(lái)可以說(shuō)是開(kāi) 銷(xiāo)巨大,本來(lái)往內(nèi)存中寫(xiě)數(shù)據(jù)的簡(jiǎn)單操作現(xiàn)在要從服務(wù)器端傳到客戶(hù)端或者數(shù)據(jù)庫(kù),然后再傳回來(lái)。與其用這么大的開(kāi)銷(xiāo)來(lái)維護(hù)一個(gè)數(shù)據(jù)模型再在最后把這個(gè)模型塞 回?cái)?shù)據(jù)庫(kù),還不如直接根據(jù)需要更新數(shù)據(jù)庫(kù)里邊的數(shù)據(jù)。

 

然后我們?cè)賮?lái)看V?,F(xiàn)在很多PHP程序簡(jiǎn)單的使用了一些模板技術(shù)就在說(shuō)明中寫(xiě)“采用MVC架構(gòu)”。其實(shí)絕大多數(shù)的PHP模板程序都只是分離HTML 和PHP的,而非MVC強(qiáng)調(diào)的顯示邏輯和業(yè)務(wù)邏輯分離。一個(gè)混用HTML和PHP的頁(yè)面一樣可以是MVC的一部份。如何分離顯示邏輯和業(yè)務(wù)邏輯至今沒(méi)有一 個(gè)滿(mǎn)意的方案。我個(gè)人則比較認(rèn)同http://www.phpe.net/articles/384.shtml的實(shí)現(xiàn)方案。至于C,和JAVA中差不 多,還是被用作轉(zhuǎn)向,這個(gè)在PHP中其實(shí)并不重要。


一個(gè)極耗資源的M + 一個(gè)區(qū)別不大的V + 可有可無(wú)的C 構(gòu)成了PHP中所謂的MVC。

基于以上分析,Easy認(rèn)為,PHP原有的3層構(gòu)架比所謂的MVC更為高效,而3層構(gòu)架中的表現(xiàn)層要解決的問(wèn)題MVC中的V也同樣存在。一個(gè)改進(jìn)后的3層架構(gòu)比MVC更適用于PHP。

穩(wěn)定

產(chǎn)品高可用性高并發(fā)

貼心

項(xiàng)目群及時(shí)溝通

專(zhuān)業(yè)

產(chǎn)品經(jīng)理1v1支持

快速

MVP模式小步快跑

承諾

我們選擇聲譽(yù)

堅(jiān)持

10年專(zhuān)注高端品質(zhì)開(kāi)發(fā)
  • 返回頂部