前言:
文章將介紹通過自己搭建一個MVC微型架構來瞭解MVC(model-view-control)三層的架構以及關係
MVC(Model-View-Control)三層介紹
為了更好地將各個功能層區分開發以便於不同專長的人各司其職,於是在眾多開發人員的努力下,以MVC為架構模式的架構越來越多,國內著名的PHP架構有Yii2,Yii以及ThinkPHP等國外的著名PHP架構Laravel等這些架構都是基於MVC模式開發的
簡單地說 View是表現層,諸如一些html格式,xml格式等都可以充當該表現層的模板,Model是模型層,諸如一些具體的商務邏輯等都是在model中完成的。而Controller是控制器層,由它進行選擇哪個模型以及哪個表現層,打個比方,控制器就像是遙控器而View就像是電視螢幕,而Model就像是電視節目,當然了,比方有些不太合適的地方
MVC工作流程
第一步 瀏覽者 -> 調用控制器,對它發出指令
第二步 控制器 -> 按指令選取一個合適的模型
第三步 模型 -> 按控制器指令取相應資料
第四步 控制器 -> 按指令選取相應的視圖
第五步 視圖 -> 把第三步取到的資料按使用者想要的樣子顯示出來
該微型MVC架構組建簡介
整個MVC包括兩個檔案夾和兩個檔案,分別是一個類庫(libs),一個函數庫(function),一個啟動引擎(pc.php)以及一個require檔案
該微型MVC架構的具體實現
function檔案夾
該檔案夾下存放了一些函數,這些函數的規模不能直接組成一個類庫,只能封裝成函數,不能封裝成類。例如包括了一些簡單調用及執行個體化控制器,模型,視圖 的方法 (區別於Mysql類 因為 Mysql對應了一系列操作故能封裝成類 )
注意在寫這三個的方法時,控制器方法可以有兩個參數,模型和視圖對應的只能有一個參數 坑處
Mysql一系列操作之所以能封裝成一個類,因為他們的一系列操作對應的是一個對象,而把 簡單調用及執行個體化控制器,模型,視圖的方法整合在一起寫成一個類的話,他們的對象不能唯一,所以不能把 簡單調用及執行個體化控制器,模型,視圖的方法整合在一起寫成一個類
libs檔案夾
這個微型架構的庫檔案中包括了
-
核心庫
能夠直接調用,必然要用於實際開發的類檔案例如:
1.資料庫類(注意這裡的資料庫類和資料庫庫是不同的,資料庫庫裡面儲存的是具體的某一種資料庫的具體操作方法,而資料庫類的兩個參數之一就是資料庫類型也就是資料庫庫中的其中一個,簡而言之就是用資料庫類來操作具體的資料庫)
2.視圖類(這個類是用來初始化和調用View層的對象,在這裡的這個架構中應該傳入給這個類初始化方法的參數的是Smaty和Smarty的設定檔)
-
資料庫庫
用於儲存各種資料庫如mysql,mysqli,pdo等一系列具體操作(指的是增刪改查)的代碼
-
視圖庫
這裡直接使用了Smarty第三方類庫,Smarty是一個視圖引擎,引擎具體體現在Smarty中的display方法,可以將模板檔案(也可以是html檔案)進行編譯將其在視圖層顯示出來
include.list.php
pc.php
pc.php是一個啟動引擎程式,這個程式中分別對資料庫類,視圖類進行了初始化,並且對controller和method靜態變數進行了初始化,通過這兩個靜態變數執行個體化了一個控制器並調用了控制器,相當於MVC工作流程中的第一步調用控制器,並對它發出指令