在 Web 應用程式開發中,MVC(Model-View-Controller)模式早已成為主流架構。它將應用程式劃分為三個核心層次:模型(Model)負責業務邏輯與資料處理、視圖(View)專注於介面呈現、控制器(Controller)協調兩者互動。這種分離不僅提升代碼可維護性與擴展性,更讓設計師與開發者能並行協作。
視圖是最終送達瀏覽器的輸出(如 HTML、XML、JSON)。許多人誤以為模板引擎即視圖,但真正的視圖應具備「自我感知」能力:渲染時,視圖元素能理解自身在整體架構中的角色與關係。例如 XML DOM 節點即知曉其層級與包含內容,而非單純的佔位符替換(如 {some_text})。若視圖僅是無意義的標籤替換,則未真正實現視圖與模型的分離。
實作視圖時,應自問:整體視圖替換是否容易?新增視圖需時多久?能否輕易切換描述語言(如同一視圖輸出 HTML 或 SOAP)?
模型封裝資料查詢與業務運算,將原始資料轉化為視圖可直接使用的有意義資料。典型做法是透過資料存取層(DAO)抽象資料庫操作。例如計算英國十年平均降雨量,模型接收每日數據、計算平均值,再傳遞給視圖顯示。
控制器是 HTTP 請求最先觸達的程式碼。它解析請求參數(如 $_GET),決定調用哪個模型與視圖。簡單站點常以 index.php 配合 switch 陳述式實現:
<?php
switch ($_GET['viewpage']) {
case 'news': $page = new NewsRenderer; break;
case 'links': $page = new LinksRenderer; break;
default: $page = new HomePageRenderer; break;
}
$page->display();
?>
雖混合程序式與物件導向風格,但對中小型專案足夠。控制器本質上是綁定模型資料與視圖元素的觸發器。
以下示範一個基礎的 MySQL 存取類,作為模型層的資料存取基礎:
<?php
/**
* 簡易 MySQL 查詢類
*/
class Dataaccess {
private $db;
private $query;
/**
* 建構子:建立持久連線
* @param string $host 主機
* @param string $user 使用者
* @param string $pass 密碼
* @param string $db 資料庫名稱
*/
public function __construct($host, $user, $pass, $db) {
$this->db = mysql_pconnect($host, $user, $pass);
mysql_select_db($db, $this->db);
}
// 後續可擴充 query(), fetch(), close() 等方法
}
?>
注意:範例使用已棄用的 mysql_* 函式,現代專案請改用 PDO 或 MySQLi,並採用預處理語句防止 SQL 注入。
MVC 並非銀彈,但提供清晰的職責分離框架。PHP 實作 MVC 關鍵在於:視圖保持「自我感知」、模型封裝業務與資料邏輯、控制器輕量化只做調度。隨著專案增長,可引入前端控制器、路由機制、依賴注入等進階模式,逐步演進為健壯的企業級架構。