這是一個用於中小型團隊開發的框架
一個簡單的個人博客bybzmt/blog.php
基於此框架的個人博客bybzmt/blog.php有非常強大的性能
| 模式 | 靜態文件 | 首頁(2篇博客) | 首頁(10篇博客) |
|---|---|---|---|
| Fpm | 4705 | 1507 | 1237 |
| Swoole | 26607 | 3276 | 2084 |
├── assets 资源目录(如:字体文件等)
├── config
│ ├── dev 开发环境配置
│ ├── product 生产环境配置
├── index.php 项目入口
├── library 其它与composer不兼容的库
├── src
│ ├── Admin 管理后台
│ ├── Api app接口端
│ ├── Backend 内部(内网)接口
│ ├── Common 公共代码目录
│ ├── Console 控制台
│ ├── Wap 手机Web端
│ └── Web Web端
├── static
│ ├── admin 后台静态文件
│ └── web Web端静态文件
├── tests 单元测试目录
├── var 可读写目录(如:模板缓存等)
└── vendor composer库
由於Swoole是一種常駐內存模式,全局變量的生命週期是應用級,而不同於fpm模式下只是請求級的。 全局變量能在不同請求間保持,所以$_GET、$_POST等原方法都不能用了。 這裡框架給每個請求實例化一個Context對像,將所有跟當前請求相關的數據存到Context對像中。
Context對像還負責組件按層級加載和替換功能。
如上面博客中:
當初始化組件時Context對像會首先在自己的命名空間中尋找對應組件,如果沒找到則讓父級Context進行初始化。 這樣子可以很方便的擴展和替換自己所需要的組件。
api:
Request對像是直接使用的swoole_http_request
Response對像同樣是直接使用swoole_http_response
在Fpm模式中框架實現一個兼容層保持了和Swoole中一樣的api
框架裡把所有跟Context對像有關的對像都實現為了Component, 主要是提供快速實例化功能,不需要反复傳遞Context對像。
另外Component也現實了一些便捷方法方便在任意組件內使用。
路由並沒有採用開放式映射式的,而是採用了註冊式路由,優點是路由比較乾淨。
路由項目位於bybzmt/router.php
如果不喜歡可以替換為你喜歡的庫,框架替換組件非常簡單。
框架推薦使用領域模型模式,使用: Service、Table、Row(Domain)結構
需要注意的是不要把數據展示的工作寫到Service、Table、Row中去,它位只負責提供最基本的數據, 按頁面、api要求組織對應的數據結構應該在控制器、視圖中實現
數據庫分為提供基礎功能的Table類,提供分錶功能的TableSplit類。 另外有提供緩存功能的TableRowCache trait。 任何用戶的表應都該繼承於Table或TableSplit類,並當需要緩存時引入TableRowCache trait即可。
注意分錶和緩存都只是對Table類中的get/gets/insert/update/delete這幾個操作進行了支持。 當用SQL直接進行數據操作時需要手動維護相關緩存或分錶功能。
框架提供了LazyRow加載方法,當實例化時只是記錄id,到訪問屬性才再試圖批量加載。
框架提供了一些常用功能方便使用
這個緩存跟上面Table中的緩存沒有關係,它是指用戶自己維護的緩存。 盡量讓不同類型的緩存用不同的類去管理,避免key衝突。
框架沒有提供模板功能,建議直接使現現有第三方模板程序。 (如:Twig)
框架的各功能並沒有想適應所有環境,只需要在80%情況下可用就行了,特殊情況在具體的項目中可以特殊處理。
框架的代碼不多,如果想用盡量把代碼都讀一遍。