前言
對於MVC,我想大家都特別熟悉了吧,即使剛剛入門PHP。初學者學習Laravel的時候大部分都將程式填入MVC構架內,導致controller與model異常的肥大,日後一般維護艱難(我一開始就這樣)。
關於MVC的“虛假理解”?
受Ruby on Rails
的影響,我們簡單的就把MVC理解成model
用來從資料庫獲取資料的、view
用來顯示頁面的,controller
用來接收model獲取的資料並分配展示view的。真的是這樣嗎?
當然,我想這在一個小型的專案裡面是不會有太大問題的,因為你的使用者僅僅只是很少一部分人,甚至說只有幾十人,當然不會有太大的問題,但是如果有上萬人呢?我想可能不行了吧。這個時候,我們應該開啟MVC
隱藏的擴充模式。
如圖,我們把model
當成Eloquent class,用一個處理資料庫邏輯的Repository
來輔助它,同樣對於controller
來言,它也有一個輔助它的功臣,那就是能處理商業邏輯Service
,這樣就解決了臃腫的問題,view
呢?我們是不是忽略了它,並不是的,它也有屬於它的處理顯示邏輯的Presenter
。
這就是擴充模式?
是的,這就是MVC
的擴充模式,也許它並不叫做擴充模式,但是我習慣這樣叫它。讓我們再一次更深入的看一下上面的那張圖,藍色的是原來的MVC,而粉色的(當然也有人說是紫色的,但是沒有關係)是我接下來要說的:Repository模式,Service模式與Presenter模式。箭頭表示物件依賴注入的方向。
我們可以發現MVC構架還在,由於SOLID的單一職責原則與依賴反轉原則:我們將資料庫邏輯從model分離出來,由repository輔助model,將model依賴注入進repository。同樣我們將商業邏輯從controller分離出來,由service輔助controller,將service依賴注入進controller。顯示邏輯也從view分離出來,由presenter輔助view,將presenter依賴注入進view。這樣寫就避免了臃腫和後期維護的不方便。
結束語
由於篇幅和時間的關係,就先介紹這麼多,如果你有更好的意見或者建議,歡迎糾正或者聯絡我,希望對同樣正在學習的你有所幫助。