這篇文章帶給大家的內容是關於PHP框架中MVC架構的分析(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
在說 MVC 架構之前,先說說PHP框架。很多很多學完PHP語言的人,面對的就是PHP各種不同的框架。什麼TP啊、Yii啊、CI啊,還有很流行的laravel啊等等。
他們的大部分都會說自己是基於MVC 的架構,接著你得試著去理解MVC 的邏輯,並嘗試著用這樣的邏輯去建立一個網站,然後會說MVC 真香~
面試
很多PHP 的面試中,可能會問關於MVC 的問題,例如MVC 到底是什麼意思,怎麼理解這種架構。然而許多人的理解是 model 是模型,他對應著資料庫中的表結構;view 對應著頁面,用於展示;controller 主要用來寫各種邏輯,關聯資料和頁面的顯示。
以上答案基本上沒有問題,但一個網站的架構真的有那麼簡單麼?顯然不是
設計
在說之前,先讓我們來了解設計模式的一種:中介者模式。一個圖像的理解就是:港行插頭和國行插頭的轉接頭。
在 MVC 架構中 controller 就是這個轉接頭。它只負責把 model 中的資料轉接給 view,對於訪客來說,他們是看不到 model 中保存的真實資料的。從另一個角度來說,這種中介者模式可以很好的將兩層資料進行友善的溝通。
爬坑
這種模式真的那麼好麼?隨著業務邏輯的越來越複雜,會發現 controller 中的程式碼越來越多,甚至連自己都不願意去調整和優化冗餘程式碼。
但從宏觀來說,網站無非是請求多一些,表單多一些,頁面多一些啊,其他也沒什麼了,為什麼會這樣呢?
沒錯,就是因為這樣或那樣的東西比較多,導致 controller 中每個方法都很長,那麼能想到的解決方法就是拆分。
如果用過yii 框架,那麼你會知道最簡單的辦法就是加一個請求form層,程式碼如下:
class AuthController { public function login() { $FLogin = new loginForm(); $FLogin->save(); } } // 一般在独立的文件夹中 class loginForm { public function __construct() { $post = $_POST; } public function save() { } }
以上的就是解決controller 中form 表單的問題,這個問題基本上能緩解很多程式碼問題。
發散
從解決 form 層來看,其實有很多類似的問題可以解決。我們知道前端有個叫做 vue.js 的框架,它裡面提到一個概念叫做 MVVM 模型。
其實在展現複雜頁面的時候,後端在對外輸出資料時,完全也可以採用這玩意進行資料輸出。至於如何建立這樣的一個模型,那就具體得看業務邏輯了。
這裡簡單拿用戶中心舉個例子,因為往往這裡不只需要一個表格的資料:
class AuthController { public function userCenterAction() { return new userVM(); } } class userVM { public $user; public $orders; public $other; public function __construct() { $this->user = $this->getUser(); $this->orders = $this->getOrders(); $this->handle(); } private function getUser() { return NULL; } private function getOrders() { return NULL; } private function handle() { } }
以上程式碼中,有個VM 層,可以將相關取得資料的程式碼放在各自的方法中,然後在handle 方法中自由組合。這樣在 controller 中的程式碼也非常方便管理。
再想想,有沒有可以封裝的其他層呢?其實是有的,例如 request 層,還有經常被框架封裝好的 validate 層,還有 laravel 中比較流行的 Middleware 層等等。只能說系統越複雜,層越多。
每個複雜系統的背後都蘊含著資深開發工程師和架構師的設計想法。以上說那麼多,不知道讀者能否理解這些東西,就拿以上程式碼來說,裡面就蘊含著另一種設計模式:建造者模式。
總結
程式碼寫多了,也就知道其中蘊含的道理了。當一個新框架誕生後,焦點從學習這個框架,慢慢變成了這個框架是如何設計的,解決什麼樣的問題。哪些地方用了比較好的技術和方法,從中能收穫到什麼。有些地方的設計想法是什麼樣的,有麼有更好的設計,為何我能想到,對方想不到呢,是不是我遺漏了什麼。
前幾年使用過各種 PHP 框架,小到 CI,大到 Symfony。不用那麼多框架,也體會不到這些東西。學習程式設計其實跟英文一樣,沒什麼捷徑可以走。
多寫,多想,多練......
#以上是PHP框架中MVC架構的分析(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!