php項目代碼組織變化
虎嗅薔薇
發(fā)布于 云南 2025-07-15 · 1332瀏覽

以前php項目的項目喜歡把controller放在一個目錄,model放在一個目錄,service放在一個目錄,現(xiàn)在都是一個模塊或者一個數(shù)據(jù)表一個模塊。

這種從按功能分層組織代碼(如 MVC 傳統(tǒng)模式)到按領(lǐng)域 / 業(yè)務(wù)模塊組織代碼(如 DDD 或模塊化架構(gòu))的轉(zhuǎn)變,主要發(fā)生在 2010 年代中期,是隨著微服務(wù)架構(gòu)、前端工程化和敏捷開發(fā)理念的普及而逐漸流行的。以下是關(guān)鍵背景和時間線:

1. 傳統(tǒng) MVC 分層架構(gòu)(2000s-2010s)

早期的 PHP 框架(如 CodeIgniter、CakePHP、Yii 1.x)和 Java 框架(如 Struts)普遍采用 MVC 模式,將代碼按功能職責(zé)分為:

(1)Controller 目錄:處理請求和路由

(2)Model 目錄:數(shù)據(jù)訪問層

(3)View 目錄:模板和展示邏輯

(4)Service 目錄(可選):業(yè)務(wù)邏輯層

這種結(jié)構(gòu)適合小型項目,但隨著項目規(guī)模擴大,出現(xiàn)以下問題:

(1)命名沖突:不同業(yè)務(wù)模塊的 Controller/Model 容易重名

(2)依賴混亂:模塊間依賴復(fù)雜,牽一發(fā)而動全身

(3)可維護性差:多人協(xié)作時容易在同一目錄下產(chǎn)生代碼沖突

2. 模塊化架構(gòu)的興起(2010s 中期)
隨著微服務(wù)和前端組件化的流行,后端也開始借鑒 “高內(nèi)聚、低耦合” 的思想,將代碼按業(yè)務(wù)領(lǐng)域而非功能職責(zé)劃分:
(1)每個模塊包含完整的 MVC:例如 users 模塊包含 UserController、UserService、UserModel 等
(2)模塊間通過定義清晰的接口通信:減少直接依賴
(3)前端類似演進:從按類型組織(如 components/, views/)轉(zhuǎn)向按功能模塊組織(如 user/, order/)
代表框架和工具:
(1)Laravel(2011 年發(fā)布):早期采用傳統(tǒng) MVC,但從 5.0 版本(2015 年)開始支持模塊化開發(fā),推薦按業(yè)務(wù)模塊組織代碼
(2)Symfony:通過 Bundles 支持模塊化,鼓勵將相關(guān)功能封裝在獨立包中
(3)DDD(領(lǐng)域驅(qū)動設(shè)計):2004 年提出,但直到 2010s 才被廣泛應(yīng)用于 PHP、Java 等領(lǐng)域

3. 微服務(wù)加速模塊化趨勢(2015 年后)
微服務(wù)架構(gòu)進一步推動了 “按業(yè)務(wù)邊界拆分” 的思想:
- 每個微服務(wù)本身就是一個獨立的模塊
- 每個模塊內(nèi)部可能仍采用 MVC 或其他分層模式
- PHP 社區(qū)開始流行 “單模塊單倉庫”(如 Laravel Package)的開發(fā)方式
關(guān)鍵事件:
2014 年 Docker 發(fā)布,降低了微服務(wù)部署門檻
2015 年 Kubernetes 發(fā)布,進一步推動微服務(wù)普及
2016 年前后,PHP 框架(如 Laravel、Symfony)開始提供更完善的模塊化工具

4. 為什么這種轉(zhuǎn)變越來越流行?
敏捷開發(fā)需求:模塊化結(jié)構(gòu)更適合快速迭代和團隊協(xié)作
代碼可維護性:業(yè)務(wù)邊界清晰,減少模塊間耦合
技術(shù)棧演進:前后端分離、容器化部署等技術(shù)要求更獨立的模塊
DDD 理念普及:領(lǐng)域驅(qū)動設(shè)計強調(diào)按業(yè)務(wù)領(lǐng)域建模,而非技術(shù)職責(zé)

5. 當(dāng)前主流實踐

現(xiàn)代 PHP 項目(如 Laravel、Symfony)通常采用以下結(jié)構(gòu):

app/
├── User/          # 用戶模塊
│   ├── Controller/
│   ├── Service/
│   ├── Model/
│   └── ...
├── Order/         # 訂單模塊
│   ├── Controller/
│   ├── Service/
│   ├── Model/
│   └── ...
└── ...

這種結(jié)構(gòu)在中大型項目中優(yōu)勢明顯,但小型項目可能仍采用傳統(tǒng)分層結(jié)構(gòu),因為:
模塊化需要更多前期設(shè)計
小型項目的業(yè)務(wù)邊界可能不夠清晰

 
 

 

 

總結(jié)
這種轉(zhuǎn)變始于 2010 年代中期,隨著微服務(wù)和 DDD 理念的普及而加速,至今已成為中大型項目的主流實踐。核心驅(qū)動力是提高代碼可維護性、適應(yīng)敏捷開發(fā)和微服務(wù)架構(gòu)。如果你在開發(fā)小型項目,傳統(tǒng)分層結(jié)構(gòu)仍然適用;但對于大型復(fù)雜系統(tǒng),按業(yè)務(wù)模塊組織代碼會更具優(yōu)勢。

 
 

 

 

虎嗅薔薇
陽光瀝肩頭,仿佛自由人。
瀏覽 1332
相關(guān)推薦
最新評論
贊過的人
評論加載中...

暫無評論,快來評論吧!