Laravel 6 框架中使用Repository模式
阿新 • • 發佈:2021-07-12
為什麼要使用Repository
若將資料庫邏輯都寫在model,會造成model的肥大而難以維護,基於SOLID原則,我們應該使用Repository模式輔助model,將相關的資料庫邏輯封裝在不同的repository,方便中大型專案的維護
資料庫邏輯
在CRUD中,CUD比較穩定,但R的部分則千變萬化,大部分的資料庫邏輯都在描述R的部分,若將資料庫邏輯寫在controller或model都不適當,會造成controller與model肥大,造成日後難以維護。
Model
使用repository之後,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。
在中大型專案,會有幾個問題:
將資料庫邏輯寫在controller,造成controller的肥大難以維護。
違反SOLID的單一職責原則:資料庫邏輯不應該寫在controller。
controller直接相依於model,使得我們無法對controller做單元測試。
比較好的方式是使用repository:
將model依賴注入到repository。
將資料庫邏輯寫在repository。
將repository依賴注入到service。