「好的程式碼應分為多個部分:合適的庫、清晰的函數呼叫、清楚的資料庫結構、站點各部分相對獨立。」
| 原則 | 說明 |
|---|---|
| 資料庫無關性 | 透過抽象層(PHPLIB、PEAR DB、自建)封裝 SQL 差異,便於切換 MySQL/PostgreSQL/Oracle |
| 介面無關性 | 邏輯層與表現層分離,支援 HTML/WAP/XML 多介面複用同一資料存取層 |
| 可移植性 | 設定檔集中管理(資料庫連線、路徑、常數),避免硬編碼分散各檔案 |
| 物件導向/函數庫化 | 重複邏輯封裝為類別/函數,單點修改全站生效 |
<?php
require("database.php");
require("html.php"); // 共用版面函數
require("bug_data.php"); // 資料存取庫
echo site_header("Page Title");
echo "Updating A Bug";
if (bug_data_update($f1, $f2, $f3)) {
echo "Update Failed! " . $feedback; // 全域錯誤訊息
} else {
echo "Updated Successfully";
}
echo site_footer();
?>
<?php
// bug_data.php
function bug_data_update($field1, $field2, $field3) {
// 1. 驗證輸入
// 2. 安全檢查(權限、CSRF 等)
// 3. 執行 SQL 更新
// 4. 成功 return false,失敗 return true + 設定 $feedback
}
?>
database.php 提供統一介面,不綁定特定 DBbug_data.php「任何將在超過一處使用的程式碼,都應放入庫中。」
例:使用者驗證邏輯封裝為 check_login(),未來改用 Session/資料庫/OAuth 僅修改此函數。
作者承認即使是經驗豐富的開發者,回顧舊碼也會發現改進空間。架構設計是持續演進的過程,歡迎讀者分享大型專案規劃經驗與重構心得。