SpeedPHP框架的架構設計遵循以下規則:MVC基礎,按需載入,直接驅動,擴展點執行。
MVC基礎架構
MVC(Model模型 - View視圖 - Controller控制器)的三層架構是SpeedPHP框架的核心架構,這是一個實踐證明了較為適合WEB系統開發的架構。
* M層以spModel類為父類,提供數據及業務相關操作的模型結構標準與功能。
* V層以PHP的模板引擎為基礎,提供業界通用的模板引擎功能。
* C層以spController類為父類,提供輕便的程序轉向執行功能。
MVC架構是面向對象編程的最佳實踐之一,通過對父類的繼承和覆蓋,將可讓SpeedPHP框架的MVC各部件更強大和更適合當前的應用程序。
同時,從軟件工程角度而言,MVC架構也較為適合軟件建模以及團隊開發。
按需載入
按需載入是SpeedPHP框架保持良好的運行速度的重要保證之一,應用程序啟動初期,框架將僅載入MVC核心架構和核心函數庫——包括了日常編程開發中80%的功能支持。余下的20%功能,將在程序需要的時候,才會搜索指定目錄來載入功能文件。
按需載入的理念保證了應用程序的功能和速度兩者的平衡。
直接驅動
在大部分的通用PHP框架中,對數據庫及模板引擎的支持,都是三層結構:
底層驅動(對數據庫或模板的原始操作)-> 抽象層(轉換表達式)-> 應用層(通用編程接口)
使用三層結構的主要原因有二:
* 抽象層能夠方便地支持多種數據庫類型(模板引擎),
* 應用層功能更多。
但在實際開發中,真正“經常”使用的數據庫接口功能(模板引擎功能)都是比較少的,不外乎是CRUD(查增改刪)等幾個簡化的操作以及復雜的SQL執行,呈現80/20的現象。也就是“開發者80%時間使用的功能,只占全部功能的80%。而有80%的功能,只有20%機會會使用到”。
另外,經過試驗也可以發現,其實在沒有抽象層的情況,支持多數據庫多模板引擎也并非難事。
綜上考慮,SpeedPHP框架去除了抽象層的設計:底層驅動 -> 應用層。在保證應用成提供了常用接口功能的前提下,底層驅動和應用層直接實現了原本抽象層才能做到的事情,當然,SpeedPHP框架的直接驅動,在一定程度上,減少了應用層的功能數量。
所以,一般來說,較復雜的數據庫及模板引擎功能,均建議直接使用數據庫句柄(SQL語句)和模板引擎對象來實現(這部分只會有20%機會出現)。
擴展點執行
SpeedPHP框架對第三方程序和類庫的支持,是通過直接調用和擴展功能來實現的。
直接調用指的是SpeedPHP框架的“按需載入”,通過框架提供的核心函數,開發者可以很方便地載入和使用第三方類庫和功能函數。
擴展功能是框架在保存精簡的前提下,實現更強大功能的模式之一。
擴展功能主要通過擴展點來實現,擴展點是多個分布在SpeedPHP框架不同關鍵位置的程序執行點,開發者可以方便地在應用程序設置中,控制和指示這些擴展點的執行,也就是可以自由地在擴展點中加入自己希望執行的代碼,以便達到更復雜的功能。
> 比如說在框架的路由系統中,存在著router_prefilter和router_postfilter兩個擴展點,分別代表了路由系統“執行前”和“執行后”的擴展。如spUrlRewrite擴展程序就是通過router_prefilter(執行前)的擴展,以URL偽靜態訪問為基礎,動態修改路由的訪問方向,以達到偽靜態轉向的功能。