技術交流

PHP 該不該用 MVC?

在一次部門例行會議中,有一項議題是關於在寫 PHP 代碼時是否應採用 MVC 設計模式。有兩種意見:採用 MVC 模式和不採用 MVC 模式。這兩種觀點的持有者都各有各的道理,不能說哪種寫法更好,要看具體情況,本文先介紹一下 MVC 的概念及優點,之後再結合 PHP 給出自己的愚見。

什麼是 MVC

MVC 是把類的模型 / 視圖 / 控制器 ( Model / View / Controller ) 三元組協調的構建成一個複雜應用程式的概念。MVC 包括三類對象,「模型 Model」是應用物件,「視圖 VIEW」是它在螢幕上的表示,「控制器 Controller」定義使用者界面對使用者輸入的回應方式。為了使 VIEW 能正確的反映 Model 的狀態,必須要有 Controller 來協調控制他們。如果不使用 MVC,使用者介面設計往往將這些物件混在一起,而 MVC 則將它們分離以提高靈活性和重複使用性。

MVC 在 WEB 中的應用

現在的一些基於 Web 的分散式系統如 B2B 電子商務系統,就適合採用 MVC 架構。通過分析,從高層次的角度可以將一個應用的物件分為三類:第一類就是負責顯示的物件,第二類物件包含商務邏輯和資料,第三類就是接收請求,控制商務物件去完成請求。這些應用的顯示是經常需要變換的,如網頁的風格、色調,還有需要顯示的內容、內容的顯示方式等。而商務邏輯和資料是相對要穩定的。因此,表示顯示的物件 View 經常需要變化的,表示商業規則和資料的物件 Model 要相對穩定,而表示控制的 Controller 則最穩定。

應用 MVC 的優點

  • 可以為一個模型在運行時同時建立和使用多個視圖:傳播機制可以確保所有相關的視圖及時得到模型資料變化,從而使所有關聯的視圖和控制器做到行為同步。
  • 視圖與控制器的可接插性:答應更換視圖和控制器物件,而且可以根據需求動態的打開或關閉、甚至在運行期間進行對象替換。
  • 模型的可攜性:因為模型是獨立於視圖的,所以可以把一個模型獨立地移植到新的平臺工作。需要做的只是在新平臺上對視圖和控制器進行新的修改。
  • 潛在的框架結構:可以基於此模型建立應用程式框架,不僅僅是用在設計介面的設計中基於以上應用 MVC 的優點,我認為不管 PHP 是否採用框架結構都可採用。

從以上 MVC 的概念延伸出來的種種優點,不難得看出至少 Web 應用上,MVC 肯定是先進的,甚至小型的 PHP 網站也應採用 MVC 的架構。再回到我們議題,MVC 是不是適合在PHP中使用,我覺得還應該看業務邏輯部分的抽象和封裝是否到位?如果做得好,在 PHP 中完全可使用 MVC 的設計模式。當然,如果水準有限,只是很牽強的生搬硬套 MVC,在使用了 MVC 後反而使開銷變大,還不如不使用的好。

閱讀更多