PHP網站MVC架構形式中的種種誤區

來源:互聯網
上載者:User
PHP網站MVC架構模式中的種種誤區

??? MVC架構模式已不再是新技術,也不再是新名詞。但是,如果你能大概看一看因內的開源的PHP開發架構,或者國內的PHP開源軟體。我們不難發現,很多這們的代碼與其說是MVC,還不如稱其為東施效顰。很多是為MVC而MVC。或者,只提供MVC的部分功能。而不是真正意義上的MVC。這其中,很多原因當然是軟體開發人員不懂得設計模式,不瞭解MVC的根本目的。
??? 由此,我們先明確一下,MVC的根本目的有哪些:
??? 1、分工:使用MVC可以把資料庫開發,程式商務邏輯開發,頁面開發分開。
??? ?多數人說起MVC的好處,僅限於這一點。認為,MVC不外乎是利於大型團隊合作。其實是大錯特錯了。
??? 2、松耦合。如果不懂得設計模式,根本不知松耦合是什麼意思。當然,可以簡單說明一下:
??? ?我們把模組部分,分為資料庫抽象層,資料操作層,和商務邏輯層。這是最簡單的業務架構。這樣分開的好處是什嗎?
??? ?資料庫抽象層,一般會支援多種資料庫。這樣做的目的,是可以讓你的應用快速更換資料庫。也能方便你的應用與其它類型資料庫互動。
??? ?同時,更強大的,還會有連結管理器,從而對大型網站的分庫操作,分表操作的支援。
??? ?一般,資料庫抽象層可以通過嚮導產生靜成的ORM層,或直接提供動態ORM層(這是最新的DRYSQL模式)。
??? ?但除了ORM,CRUD,還有其它的查詢。MVC中仍是要求將其寫到專門的資料操作模組中的。
??? ?為什麼要這樣做呢?這就是松耦合。當一部分改動,不會影響另一部分。
??? ?試想,如果將資料模組與業務模組混合在一起,那麼,如果某一日更換資料庫,則,你要修改的是龐大的模組部分的代碼。但將資料模組獨立出來,只要修改資料模組部分的SQL語句即可以了。
??? ?對於視圖部分,實際也是一樣。因為,本來是給PC瀏覽器用的,如果哪一天要加上手機頁面,則只要添加就可以了,其它的都可以共用,但若不分開,就得重新做一套。
??? ?從這一點看,有人說,PHP不適合於使用架構,實際上,不用架構,很多是行不通的。
??? ?可以看出其目標:這也就實現了,出現問題只要修改一處。而不是修改多處。
??? 3、共用與集中處理。控制器,是一個完全將流程按物件導向方式設計的程式流程中的組件。我們應當能夠記得,最普通的PHP程式寫法,頁頭包含SESSION模組,然後是存取控制。但若想,增加對主機名稱,子網域名稱控制,則每一個包含的頁面,都要再次增加包含。或要在SESSION模組,或存取控制模組增加一個包含檔案。於是,程式邏輯變得相當混亂。如果其中有出錯與跳轉,那麼,勢必會出現在不需要載入的頁面跳來跳去。
??? 控制器的目的,就是讓頁面請求最終到達所需要的頁面。並且是基於物件導向的流程的。
??? 通常:控制器,必須要有Host, SubDomain, IP,URL,ACL的路由檢測。由於現在一個網站,同時有瀏覽器與手機的,所以,還要有UserAgent檢測。控制器要能做到最為方便地將一個請求映射到一個模組類的一個方法(事件)中。
??? 4、完全物件導向,MVC程式,多數只有一個用戶端請求入口——bootstrap,應用往往基於這個檔案進行配置或修改。其它的全部都是class。即實現用戶端到伺服器端的事件映射。這樣做的目的,是將應用的流程規範到了一個完全物件導向的流程中。保證程式的可讀性,從而保證與程式員的無關性。
??? 5、目前流行的開放API,如果是良好的MVC架構,開放API只要直接調用資料操作層介面就能實現,這也大大節省了程式的開發量,同時增加了代碼的公用與集中處理的能力。這也就實現了,出現問題只要修改一處。
??? 6、視圖問題:因為介面的需求是多樣的,不斷變化的,往往對於WEB模式的公司專屬應用程式更加顯示出這樣的變化。目前,可悲的是,PHP仍沒有象.net,或flex相似的視圖模式。只有JAVA,有Typstray,JFS這樣的面向組件的視圖模式,PHP目前均沒有成熟的開源產品可用。雖說,Smarty抄襲了struts,phpFACES抄襲了JFS,但是本質上,均沒有完全體充分利用PHP的語言的長處。phpFACES則更是無人問津,國內幾乎無人使用。而FLAX RIA的衝擊,以及JS架構帶來的RIA新技術,也沒有能與後端PHP相結合。JSP落後,PHP一樣也是落後。人們需要新的開源。當然,phpFACES可以說是這方面的先驅,因為,它是基於DOJO建立的組件庫。
??? 7、外掛程式技術:一個好的開發架構。所有的擴充應當均是由外掛程式式方來完成的。但現在有多少架構支援外掛程式?官方的Zend可以說是大全,而不是外掛程式式配置,這純屬是技術誤導。當然,最好的,外掛程式最多的,則是symfony. 而symfony的ORM還在使用Propel,沒能用上最新的DRYSQL技術。就外掛程式而言,很多情況下限制了軟體的應用,推廣與發展,比如,大名鼎鼎的WordPress,提供了完美的應用外掛程式,但底層開發架構極為混亂。最簡單的,只能用於Mysql資料庫,誰要是想用Oracle,那你的惡夢就開始了。所以,一個好的架構,應當在任何一個層面均支援外掛程式。外掛程式由此可以大概分為:資料庫驅動外掛程式,資料模組外掛程式,緩衝驅動外掛程式,圖型庫外掛程式等功能類外掛程式,同時還有應用類外掛程式。現時代,沒有外掛程式技術,就沒有成功可言。也只有支援外掛程式,才能夠實現無限擴充,通用性才不是空話。但是,從國內行業論壇上來看,沒有專門討論外掛程式介面實現技術的相關的話題,高處不勝寒!!
??? 8、開發架構的架構:一個WEB應用架構,其核心應當是一個好的開發架構,這一個架構,必須要有的核心是:App對象,一個給入口檔案用來完成一切事務的彙總類,AutoLoader 裝載器,uxConfig 設定檔讀取,uxLocale 本地化管理,Model 模型,View 視圖,Controller 控制器(主機,子網域名稱,URI,UA,IP,ACL均需要支援),Exception ErrorHandle錯誤與異常管理,Security 安全管理(Validator 資料驗證,Filter 資料過濾器)狀態管理(Session 會話管理,Cache 緩衝管理)。然後是應用必須的基本類庫,其中,資料庫排第一位。架構中所以把資料庫放到類庫而不是放到核心,主要是兩個方面,其一,讓使用者有選擇權,使用者可以選擇用架構本身的,也可以去選ADODB,DOCTRINE,PEOPEL等第三方的。其次,網站規模的變化,資料庫層面變化是最快的。但現在有多少開發架構有這樣的規範的架構?
??? 由此,我們發現:MVC架構模式中的種種誤區不外乎來源於兩個方面:
??? 其一是:人們的認識造成的。PHP開發隊伍技術落後,素質差是一大本質原因。對軟體架構的不瞭解,特別是物件導向,設計模式的不瞭解,從而無法深入理解MVC。
??? 這與PHP自身發展也有關係,PHP4以前,是不支援物件導向的。PHP是以簡易吸引了大量使用者。但一旦用於大型網站開發,對於這此嫌JSP煩鎖的人,惡夢就開始了。
??? 其二是:PHP開發架構發以及開源技術發展密切相關的,開發架構對MVC不能提供足夠好的MVC架構支援,同時,沒有足夠好的開源組件,使得人們不能進一步理解MVC。如同,你用了PHP的ADODB,但它也不會要求你在程式中,要把資料模組與業務模組分開。這是架構師的責任。然而,中國PHP行業有多少網路應用架構師?比如,敏捷之履上海活動時,杭州某大公司的某外籍CTO大講特講PHP根本不需要架構,云云,這不能不反映出國內PHP行業技術的落後。現實是如此殘酷。唯有正視軟體產業的現狀。
???
???

?

???

1 樓 115300111 2011-03-20

嗯 非常認同

2 樓 yuhao_1202 2011-03-27

不錯。認同。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.