首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

ThinkPHP 多層 MVC 架構設計與實踐

     編輯:PHP 綜合知識

為什麼需要多層 MVC?

隨著業務複雜度提升,單一 Model 層難以承載「資料存取、業務邏輯、對外服務」三種職責。ThinkPHP 3.2+ 原生支援多層目錄結構,讓開發者可按領域劃分層次。

一、模型層多層劃分

在模組目錄下建立三個子目錄:

  • Model/ — 資料層:自動驗證、自動完成、CRUD 接口
  • Logic/ — 邏輯層:業務規則、流程編排
  • Service/ — 服務層:對外 API、第三方對接

命名空間與類定義範例

// Home/Model/UserModel.class.php
namespace Home\Model;
use Think\Model;
class UserModel extends Model {}

// Home/Logic/UserLogic.class.php
namespace Home\Logic;
use Think\Model;
class UserLogic extends Model {}

// Home/Service/UserService.class.php
namespace Home\Service;
use Think\Model;
class UserService extends Model {}

實例化調用方式

D('User');           // 實例化 UserModel(預設層)
D('User', 'Logic');  // 實例化 UserLogic
D('User', 'Service');// 實例化 UserService

修改預設模型層

'DEFAULT_M_LAYER' => 'Logic', // 全域預設改為 Logic
// 之後 D('User') 將實例化 UserLogic
D('User', 'Model'); // 需顯式指定才能用 Model 層

二、視圖層多主題支援

通過目錄區分主題或終端類型:

View/default/User/add.html  # PC 預設主題
View/blue/User/add.html     # 藍色主題
View/mobile/User/add.html   # 手機端主題

配置預設視圖層:

'DEFAULT_V_LAYER' => 'Mobile', // 預設使用 Mobile 目錄

三、控制器層多類型分離

  • Controller/ — 業務控制器:處理 HTTP 請求、頁面渲染
  • Event/ — 事件控制器:內部事件響應,僅供 A('User','Event') 內部調用
// Home/Controller/UserController.class.php
namespace Home\Controller;
use Think\Controller;
class UserController extends Controller {}

// Home/Event/UserEvent.class.php
namespace Home\Event;
use Think\Controller;
class UserEvent extends Controller {}

配置預設控制器層:

'DEFAULT_C_LAYER' => 'Event',

四、層級間的靈活組合

  • 控制器可自由調用任意層模型:D('User','Service') 獲取資料,D('User','Logic') 處理業務
  • 視圖渲染可切換主題:$this->theme('blue')->display()
  • ThinkPHP 不強制 M/V 存在,僅有 C 或 V 也能運行(但不建議)

五、實戰建議

  1. 小型專案:單層 Model 足夠,避免過度設計
  2. 中大型專案:採用 Model(資料)+ Logic(業務)+ Service(對外) 三層
  3. 多終端:建立 Mobile 視圖層,配合檢測 User-Agent 自動切換
  4. 事件驅動:僅在有明確「領域事件」(如訂單支付成功、用戶註冊)時引入 Event 層

總結

ThinkPHP 多層 MVC 通過「目錄即命名空間、D/A 方法動態實例化」機制,以極低成本實現架構分層。核心在於按職責劃分目錄、按需調用層級,而非盡可能堆疊層次。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved