首頁 >後端開發 >php教程 >PHP框架中MVC架構的分析(附範例)

PHP框架中MVC架構的分析(附範例)

不言
不言轉載
2019-03-13 14:02:453138瀏覽

這篇文章帶給大家的內容是關於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中文網其他相關文章!

陳述:
本文轉載於:segmentfault.com。如有侵權,請聯絡admin@php.cn刪除