[laiUanKe] Repository 模式

對於新接觸 MVC 的人很容易把 M 理解成「model == database」

進而把所有的邏輯 ( 商業邏輯與顯示邏輯 ) 都塞進同一隻 model
造成 model 超級肥,跟當初全部寫在 controller 一樣
就失去了 MVC 的原意
在維護時候要從一大包的 model 中找對應的 function

我一開始在寫laiUanKe也是這樣認為
然後請人幫我過目後得到一個建議「用repository或是scope取代邏輯直接寫進 model」
scope 就是 scope,一般比較小型的專案我們會直接使用
而複雜一些的中大型專案則是建議使用 repository

在Repository 模式中
Model 僅當成 Eloquent class
Repository 輔助 model,處理資料庫邏輯,然後注入到 service
若是 Controller 要對資料庫進行操作,則是去呼叫 Repository 內的 function

除卻資料庫邏輯後我們的 Model 還有什麼用處呢?
這點一度讓我卡關許久,直到我看了這篇才跳出輪迴
model 僅當成Eloquent class,保留以下部分:
  • Property : 如$table$fillable…等。
  • Mutator: 包括 mutator 與 accessor。
  • Method : relation 類的 method,如使用 hasMany() 與 belongsTo()
  • 註解 : 因為 Eloquent 會根據資料庫欄位動態產生 property 與 method,等。若使用 Laravel IDE Helper,會直接在 model 加上 @property 與 @method 描述 model 的動態 property 與 method。

如此就解釋了我的一些疑惑,就順利的把 Model 和 repository 分離了
然後在該篇文章最開頭提到
「基於SOLID原則,我們應該使用 Repository 模式輔助 model」
我是知道SOD(Stack Overflow Developer)啦,SOLID原則真的沒聽說過
所以我就來研究了一下SOLID原則,主要是為了因應未來程式碼變動
而建立的原則,其實有幾項已經有在使用只是不知道為何這樣做
單單是聽說「這是一種比較好的程式寫法」
在了解之後可以時時檢視自己的程式,提醒自己的程式品質

留言