2 回答

TA貢獻1982條經驗 獲得超2個贊
MVC概念來自傳統的桌面軟件開發,在那樣的環境下,事件發生時,Model可以主動通知View,而這在HTTP協議里是不可能的(長連接comet除外?。?。長期以來,PHP業界對MVC框架中M和C的理解和運用都是不精細的(當然,夠用就好,能滿足絕大多數業務了)。這導致MC分層不清,PHPer在寫代碼的時候沒有明確的規則,到底業務邏輯放在C里還是M里,常見的問題有:
C層承擔職責過多,如,贊一個答案是給對應回答者加聲望,寫到C里面去了
M層太單薄,就繼承一下框架的Model(或者DB類),實現數據庫的增刪查改
非數據庫操作(如調用微博OpenAPI)只好包裝到Util類
用戶輸入($_GET,$_POST)全局亂跑,M層和Util里都有
由于大部分場景下,PHP都用來做Web應用,而且是Database Driven Application,所以,各類Database Driven的快速開發框架也應運而生,比如說,CakePHP的Model類干脆就定義了CURD幾個針對數據表的操作,Qcodo直接根據數據表結構自動生成MVC三層的腳手架代碼。
我理解的PHP應用是5層結構,M層應再拆分為Biz Model,DAO,Infrastructure,貼幾幅圖片:

TA貢獻2019條經驗 獲得超9個贊
在一些小型項目中,完全可以舍棄Model層,但是大項目中,會有分工合作的。模型負責跟DB的交互,控制器就可以用戶動作提交判斷、調用不同的model,最后想用戶返回結果。后期維護也會非常方便。
- 2 回答
- 0 關注
- 895 瀏覽
添加回答
舉報