以前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)勢。





暫無評論,快來評論吧!