曾今
誰都有過迷茫期,下面是我開始PHP開發中,不斷改變的程式碼組織方式。
- 初期:所有程式碼一股腦控制器controller
- 曾今只是簡單的理解MVC
- 中期:業務程式碼抽象一部分到模型層model
- 開始覺得model層是否該做點什麼了
- 後期:業務程式碼控制器,模型層只寫db的curd方法
- 複雜的業務程式碼使controller過於的龐大和難以維護
當下
汲取以前的碼碼體驗,我目前的碼碼方式做了如下改變:
更合理的分層
- 控制器暴露資源
- 業務程式碼到邏輯層
- 模型層只寫db的curd方法
度的把握,凡事都是靈活的,也不都是這樣,認為足夠簡單的邏輯還是“業務程式碼控制器,模型層只寫db的curd方法”。
依賴注入,懶載入,前置中介軟體
- 依賴注入容器很重要,配上懶載入,減少程式碼,解耦依賴,提升效能
- 關於容器可以參考我之前簡單的實現easy-php.tigerb.cn/#/?id=servi…
- 前置中介軟體注入我們依賴的類
- 我實現的簡單的前置中介軟體,示例掛載了一個gateway到控制器之前easy-php.tigerb.cn/#/?id=mvc-t…
元件化程式碼
首先我們需要利用composer來拆分和元件化我們的程式碼,業務中簡單的composer require即可複用我們的業務程式碼。但是有一個問題如果使用 packagist.org 需要把程式碼開源出去,和業務無關的工具類還好說,而且開源還是個好事情,但是和業務相關比較敏感的元件就有問題了,所以我們需要搭建一個私有的packagist, 私有packagist示例:packagist.tigerb.cn/,具體搭建步驟見文末。
總結
目前讓我接手一個專案我會從如下幾個方面去組織我的php程式碼:
- composer元件化程式碼,依賴開源或私有packagist
- 前置中介軟體懶載入的方式依賴注入composer require的元件
- 控制器暴露資源
- 優雅的引數校驗工具類
- 使用try...catch...finally...
- 響應儘可能的符合restful思想,比如error code:400,404,500...
- 業務程式碼到邏輯層(也不一定)
- 複雜的業務程式碼先建模再寫,建模可以組織好我們的程式碼並且可以運用一些設計模式,關於建模可以參考的我的文章PHPer月工作總結之觀察者&裝飾器模式
- 模型層只寫db的curd方法
- 不可撼動的原則
結語
不足還有很多,在這裡只是把自己的想法分享出來,好的大家可以借鑑,不好的希望大家多多指正。
THX~
附錄
Satis搭建私有的packagist過程,安裝步驟如下:
step 1:
composer create-project composer/satis:dev-master --keep-vcs && cd satis
step 2:
touch satis.json
satis.json檔案的內容如下
{
"name": "packaglist-tigerb",
"homepage": "http://packaglist.tigerb.cn",
"repositories": [
{ "type": "vcs", "url": "http://github.com/tigerb/easy-mipush" },
{ "type": "vcs", "url": "http://github.com/easy-framework/easy-router"}
],
"require-all": true
}
複製程式碼
step 3:
php bin/satis build ./satis.json <你的web servser專案目錄,比如我的路徑/mnt/www>
step 4:
配置nginx server 配置,重啟nginx即可
如何使用?
簡單的配置composer.json即可,增加新的repositories地址,具體示例配置如下:
{
"name": "tigerb/test",
"authors": [
{
"name": "TIGERB",
"email": "tigerbcode@gmail.com"
}
],
"repositories":[
{"type":"composer", "url": "http://packagist.tigerb.cn"}
],
"config": {
"secure-http": false
},
"require": {
"tigerb/easy-mipush": "^0.1.0"
}
}
複製程式碼