什麼?快來開啟 MVC 的 “擴充 “模式

Jouzeyu發表於2019-09-01

前言

對於MVC,我想大家都特別熟悉了吧,即使剛剛入門PHP。初學者學習Laravel的時候大部分都將程式填入MVC構架內,導致controller與model異常的肥大,日後一般維護艱難(我一開始就這樣)。

關於MVC的“虛假理解”?

Ruby on Rails的影響,我們簡單的就把MVC理解成model用來從資料庫獲取資料的、view用來顯示頁面的,controller用來接收model獲取的資料並分配展示view的。真的是這樣嗎?


當然,我想這在一個小型的專案裡面是不會有太大問題的,因為你的使用者僅僅只是很少一部分人,甚至說只有幾十人,當然不會有太大的問題,但是如果有上萬人呢?我想可能不行了吧。這個時候,我們應該開啟MVC隱藏的擴充模式。


什麼?快來開啟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。這樣寫就避免了臃腫和後期維護的不方便。


結束語

由於篇幅和時間的關係,就先介紹這麼多,如果你有更好的意見或者建議,歡迎糾正或者聯絡我,希望對同樣正在學習的你有所幫助。

相關文章