亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PHP框架中MVC架構的案例分析

發布時間:2020-10-28 21:32:32 來源:億速云 閱讀:150 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關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架構的案例分析就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

天峨县| 韶山市| 图片| 长宁县| 临漳县| 美姑县| 富宁县| 墨脱县| 景洪市| 新宁县| 颍上县| 石嘴山市| 大埔区| 贵港市| 禹州市| 磴口县| 台湾省| 蒙城县| 博乐市| 霍邱县| 辉县市| 甘德县| 和林格尔县| 丽江市| 绥德县| 镇沅| 车致| 正定县| 时尚| 柞水县| 名山县| 泸溪县| 遂宁市| 虞城县| 德州市| 德清县| 徐水县| 寿阳县| 永顺县| 大名县| 富顺县|