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

核心架構概念深度解析:單一入口、MVC、OOP、ORM、CRUD、ActiveRecord

     編輯:PHP 綜合知識

前言

這六個概念構成現代 PHP 應用架構的骨架。本文不僅定義術語,更剖析它們的關係、演進脈絡與落地選型建議,幫助開發者建立正確的架構心智模型。

一、單一入口

定義

應用程式所有 HTTP 請求均導向單一 PHP 檔案 (通常為 public/index.php),由該檔案啟動框架、路由分發、執行控制器、回應。

實現方式 (Nginx)


server {
    root /var/www/app/public;
    index index.php;

    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    location ~ \.php$ {
        fastcgi_pass unix:/run/php/php8.2-fpm.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

優勢

  • 集中攔截:中介軟體 (認證、限流、日誌、CORS) 統一處理。
  • 安全隔離:公開目錄僅 index.php、靜態資源,原始碼、配置、Vendor 置於 Web Root 外。
  • 部署簡單:單一入口對應單一容器/進程模型。

誤區澄清

「單一入口會造成效能瓶頸?」

錯誤。PHP-FPM 池化處理並發,入口檔案僅初始化框架核心 (毫秒級),真正耗時在業務邏輯、DB、外部 API。反而因集中初始化可共用快取、連線池,提升整體吞吐。

二、MVC (Model-View-Controller)

職責劃分

層職責不應包含
Model資料存取、業務規則、領域邏輯HTTP 請求/回應、模板渲染
View資料呈現 (HTML, JSON, XML, CSV)資料庫查詢、複雜業務計算
Controller接收請求、協調 Model/View、回應SQL、HTML 字串拼接、複雜業務邏輯

請求流向

sequenceDiagram
    Client->>Front Controller: HTTP Request
    Front Controller->>Router: Match Route
    Router->>Controller: Dispatch
    Controller->>Model: Call Business Logic
    Model-->>Controller: Return Domain Object/DTO
    Controller->>View: Pass Data
    View-->>Controller: Rendered Response
    Controller-->>Client: HTTP Response

演進:Action-Domain-Responder (ADR)

MVC 在 Web 端常退化為「胖 Controller」。ADR 更精準對應 HTTP 語意:

  • Action:單一請求處理器 (對應 Controller 但更細粒度)。
  • Domain:領域邏輯 (Model)。
  • Responder:建立回應 (View + 標頭/狀態碼)。

三、OOP (物件導向程式設計)

四大支柱

  • 封裝:資料與行為綁定,內部狀態透過介面存取。
  • 繼承:extends 復用與擴充,PHP 單一繼承 + Trait 組合。
  • 多態:介面/抽象類別定義契約,具體實現可互換。
  • 抽象:忽略細節,關注核心概念 (介面、抽象類別)。

SOLID 原則在 PHP 的落地

四、ORM (Object-Relational Mapping)

核心價值

  • 消除「物件圖」與「關聯表」的阻抗失配。
  • 提供型別安全的查詢建構器 (Query Builder)。
  • 支援關聯載入 (Eager/Lazy)、身份映射、工作單元 (Unit of Work)。

主流 PHP ORM 對比

原則PHP 實踐
SRP一個類別只有一個變更理由 (Service、Repository、Entity 分離)
OCP擴充用介面/抽象類別,修改關閉 (Strategy Pattern、Middleware)
LSP子類別可替換父類別 (嚴格型別提示、契約測試)
ISP介面細粒度 (LoggerInterface, CacheableInterface 而非 God Interface)
DIP依賴抽象而非具體 (Constructor Injection、Container)

關鍵模式差異

  • Active Record:實體自帶持久化方法 ($user->save()),簡單但違反 SRP。
  • Data Mapper:實體純粹 (POPO),持久化由 Repository/Mapper 負責,關注點分離更徹底。

五、CRUD (Create, Read, Update, Delete)

資料庫操作原子單元

所有業務邏輯最終歸約為 CRUD 組合。框架通常封裝為 Repository 介面:


interface UserRepositoryInterface {
    public function create(User $user): User;
    public function findById(int $id): ?User;
    public function findByEmail(string $email): ?User;
    public function update(User $user): void;
    public function delete(int $id): void;
    public function paginate(int $page, int $perPage): Paginator;
}

效能考量

  • N+1 問題:關聯載入需用 Eager Loading (with('posts'))。
  • 批次操作:insertMany、updateMany 減少 Round-trip。
  • 唯讀副本:Read 操作導向 Replica,Write 導向 Primary。

六、ActiveRecord

定義 (Martin Fowler)

「一個封裝資料庫存取並加上領域邏輯的物件。」

核心特徵

  1. 資料表 ↔ 類別 (慣例優於配置)。
  2. 欄位 ↔ 屬性 (自動映射)。
  3. 實例 ↔ 列 ( $user = User::find(1); $user->name = 'Tom'; $user->save(); )。
  4. 靜態方法作為查詢入口 ( User::where('active', 1)->get() )。

優缺點權衡

ORM模式特色適用場景
DoctrineData Mapper功能最完整、DQL、事件系統、遷移工具大型企業應用、複雜領域模型
Eloquent (Laravel)Active Record語法優雅、關聯易用、生態豐富中小型專案、快速開發
Cycle ORMData Mapper無註解、嚴格型別、效能導向現代 PHP 8.1+、高效能需求
Atlas.OrmData Mapper嚴格分離持久化與領域、不可變實體DDD 專案
優點缺點
極簡單、直觀、開發速度快實體耦合持久化、難以單元測試
程式碼生成器友善跨表/複雜查詢易產生胖模型
適合 CRUD 為主的應用不適合豐富領域模型 (DDD)

進階:混合模式

Laravel Eloquent 支援 Custom Queries、Scopes、Accessors/Mutators、Casts,可在 ActiveRecord 基礎上引入部分 Data Mapper 特性。嚴格 DDD 專案建議改用 Doctrine/Cycle ORM。

概念關係圖譜

graph TD
    A[單一入口] --> B[路由分發]
    B --> C[Controller/Action]
    C --> D[Service/Domain Layer]
    D --> E[Repository (CRUD)]
    E --> F[ORM (Data Mapper / ActiveRecord)]
    F --> G[(資料庫)]
    C --> H[Responder/View]
    H --> I[HTTP Response]
    
    style A fill:#e1f5fe
    style F fill:#fff3e0

選型建議

專案類型架構風格ORM 選擇備註
CMS、電商、後台管理MVC / ADREloquent / CycleCRUD 為主,開發效率優先
金融核心、ERP、複雜業務DDD + LayeredDoctrine / CycleData Mapper、嚴格型別、可測試
微服務、API GatewayADR / Clean ArchitectureCycle / Atlas無框架耦合、效能敏感
高併發、即時系統CQRS / Event Sourcing自定 Repository + PDO讀寫分離、事件溯源

結語

單一入口是基礎設施,MVC/ADR 是表現層協議,OOP 是設計語言,ORM 是資料存取抽象,CRUD 是操作原語,ActiveRecord 是 ORM 的一種實現模式。理解它們的定位與邊界,才能在專案初期做出正確架構決策,避免過度設計或架構債務累積。

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