我在Laravel有一個典型的存儲庫模式結構。以水果模型爲例我有:在Laravel 5.x中使用Repository Pattern時,我們應該只使用控制器中的敘述方法嗎?
類別EloquentFruitRepository
延伸摘要EloquentRepository
實施FruitRepositoryInterface
。
FruitRepositoryInterface
延伸RepositoryInterface
。
最後RepositoryInterface
定義這些通用/共享方法,如all
,find
,with
,create
等
我看了所有的一切關於Laravel 5.庫模式我審查了所有GitHub上的項目和審查關於所有學家...我有顧慮。
我喜歡只用敘事方法,在我的水果模型的情況下,應該坐在EloquentFruitRepository
的方法。的
所以在我的控制,而不是建造東西,如:
$fruits = $this->fruitRepository
->where('color', '=', 'yellow')
->where('is_available', '=', true)
->with(['comments'])
->orderBy([
'sweetness' => 'asc'
])
->all();
是它只是爲了更好地做
$fruits = $this->fruitRepository
->getAvailableYellowFruitsWithPeopleCommentsOrderedBySweetness();
,然後定義在EloquentFruitRepository
這個方法,如:
public function getAvailableYellowFruitsWithPeopleCommentsOrderedBySweetness(): Collection
{
$model = $this->makeModel();
$model
->where('color', '=', 'yellow')
->where('is_available', '=', true)
->with(['comments'])
->orderBy([
'sweetness' => 'asc'
]);
return $model->get() ?? new Collection();
}
所以一般來說,所有這些通用方法應該只在特定的el內使用頻繁的倉庫或者是否可以在控制器中使用它們?
目前雙方的工作方式。我在問最好的(最好的)練習,而不是任何人的偏好。
我們應該只使用控制器的敘事方法?
感謝您的任何反饋。
作爲的意見,即信息之外,如果你從你的資料庫來表示你的應用程序的不同部分邏輯,而不僅僅是模型訪問包裝器(一個存儲庫的硬定義),那麼你可以有一個方法,如上面提到的特定於應用程序的那部分。例如,管理員信息中心將使用帳戶模型,該模型將具有AccountRepository。但沒有理由沒有一個AdminRepository以特定的格式返回該應用程序那部分的帳戶(帳戶列表w /排序)。儘管如此,可能會有更好的術語。 – jardis
感謝您的反饋人。指出。 – slick