天天看點

談談php中的mvc

圍繞着的一直是MVC。為什麼每個人都說着MVC,都把MVC神化到如此強大的地步,真的是不明白,MVC到底有什麼好處的。

在群裡跟别人争論MVC,沒一個人贊同我的觀點。我的觀點是MVC臃腫、不靈活。然後這個群中其他人别人的觀點是MVC很靈活、很好用。但是他們說MVC并不是單單指cakephp、thinkphp、zf。還有的說discuz 、dedecms、wordpress也用到了mvc。

一直到現在為止,還是沒有用mvc來弄php,每次嘗試都是感覺又繁雜又亂。一直想不到mvc有什麼好處,我自己的代碼可以執行完所需功能,不需額外的多餘的代碼,如果用了mvc,根本不清楚那一大堆檔案夾裡面的代碼如何執行的。另外,mvc維護不友善。動不動報錯,不執行,要執行一段代碼平均引入三四十個php檔案。。基本上忽略了硬體性能。而你又不能去改他的底層

這個話題真的很夠講的,其實不光是php社群,就是java啦.net啦這些社群裡,也是就這些

OO還是不OO,架構還是不架構,模式還是不模式....等等經常讨論來讨論去.....

随便說幾句吧,

其實我們每個人寫軟體的時候都在追求使用某種模式或架構的, 程式寫到一個規模(不需要很大),你自然而然地會為了優化而整理其結構,比如說重複的代碼會寫成函數, 很多web程式都把同樣的請求預處理放進common.php裡.... 等等, 随着軟體規模進一步增大,這樣的優化也就越多, 也就更需要從整體上來把握你的軟體.

而這種對軟體的整體把握,往往取決于你對這個軟體的看法(抽象), 這種從整體上的抽象,其實也是一種為複用而作的對軟體整體的優化,(重複代碼寫成函數這種是從細節做上的優化)

從這點上來說,幾乎每個人都在用架構,不用别人的,就會用自己的,不用MVC,也會用ABC,CBD(瞎說的)

而為什麼現在MVC這麼流行,沒啥特别的,第一個,MVC還是挺好的,第二個,别的現在沒它這麼流行....

以後呢,很難說....關鍵在web本身在變化,IT在變化,再過若幹年,程式設計的思路和方法也許會完全不同.

那麼用不用MVC當然也在各人,如果你覺得你的架構更好,當然可以用.

一個好軟體的成功因素很多,不要說不MVC,就是不OO,就是不進階語言,隻要你夠牛,理論上用彙編一樣可以寫出好軟體來.(實際上所有軟體最終都是編譯/解釋成了機器語言,是以理論上一定能).

ok,上面說的是理論上.....待會我說實際上.....

實際上....

使用MVC及相關成熟架構還是有很多好處的,

經常聽人說自己寫的code不比用這些成熟MVC架構差,但是如果拿出來真的開源的話,是否會比zend這些更有競争力呢?

至少有一點,這些架構開源已經有一定時間,廣泛使用,存在的bug較易被發現和改正....就這點,很多閉源軟體是比不上的(更不要說個人的東西了),還有,比如zend的開發方式也是開放的,大部分模闆都是在社群讨論後才開始開發,不斷根據社群的回報修改,是以也更能适應大部分人的需要.

對企業來說,使用成熟架構,除了減少開發時間外,還可以減少教育訓練和新人适應時間,可以容易得到社群支援(比如問題容易google到答案).好處是顯然的,是以你看到那麼多招聘需要MVC就很合理.

對我來說,我也傾向于用成熟架構,尤其在新項目或已有項目沒有建立在穩定架構基礎上的.一個是我想節省時間,而且我也絕對寫不出zend那樣水準的代碼.

這裡說的都是大多數情形,對特定企業的特定項目,需要考慮的因素很多. 用或不用都沒有什麼對和不對.

================================================================================

再談點具體的,

對你的觀點"MVC臃腫、不靈活", 這個我也反對 :)

MVC本身隻是一個概念,談不上臃腫,不靈活, 其實你說的是這些個架構(具體的實作), 也就是說是cakephp不好,或者zend不夠好,不是MVC的問題 (個人認為,zend就比cakephp簡潔,靈活)

不過你那zend/cakephp它們和你自己的比,稍有不公,因為它們是設計給整個社群的通用架構,而你的必然是針對你已有項目,針對範圍大大不同. 對他們來說,必然不是每個子產品都對每個項目必須的,但是隻有提供了這些豐富模闆,他們才能适應不同項目(這才談得上靈活吧), 而且,比如zend,各個(大部分)模闆相對獨立,沒用到的模闆,不會參與運作,也不會有嚴重影響效率的問題.

( 如果較真地說,架構當然會影響一點效率,和最直接的php代碼比起來的話, 因為必然多點處理啊...不過這種比較有點像拿進階語言和彙編比, 進階語言當然慢,但是......這個關系到到底怎麼判斷軟體品質的問題,有空再聊 )

對他們(是誰啊)說discuz!等也算MVC的這話... dedecms我從沒看過,不知道,不過discuz怎麼也沒看出MVC來......這個也說明了好(這裡指賣得好的:))軟體不是一定要MVC,這個我支援你

再說你的問題:"有哪個開源程式用到了所謂的主流開源架構"

這個目前的确不多...原因大概我能想到的:

目前這些有名的開源項目很多已經存在很多年,而起步時MVC的架構還沒成熟....

比如discuz和wordpress都是2002年前後就有了,而zend framework是2005年才開始,

這中成熟的開源項目都是經過一定時間才能成熟的, 是以目前不多也很正常,将來一定會多起來.

還有,作為一個專門的開源項目來說,相對需求比較固定,用自己的架構也很正常.

zend有很多企業内部在使用,大部分不開源,或還沒有開源..

可以這麼看

架構是一種約定

MVC是一種理念和架構.架構實作了MVC,但架構不一定是有效率的.

MVC一種.邏輯分層的根念.C控制層,實際是對請求進行驗證和分流,V展現和使用者接品層,M是模型層,但M更多認為是一種業務模型(事實作在許多架構是一種資料庫模型)

即請求邏輯,業務邏輯和顯示邏輯分開,做到相對獨立,并提高代碼重用率

MVC可以簡實作,也以複雜實作

比如:CI架構,核心就是一個加載類.實際上,這對于MVC已足夠, 但如果同時要執行個體化多個資料庫類,性能就會變慢.模型類的實作是複雜的.

公共架構為了能實作更多功能,适合更多人和情況開發,效率低下是事實.總體來說,适合中小企業開發,不适合高效率能網站開發.

PHP 交流群:120372298    大家一起學習

轉載于:https://www.cnblogs.com/guhao/archive/2013/03/06/2945363.html