gpt4 book ai didi

php - 在 Laravel 5.x 中使用存储库模式时,我们应该只在 Controller 中使用叙述方法吗?

转载 作者:搜寻专家 更新时间:2023-10-31 21:03:23 24 4
gpt4 key购买 nike

我在 Laravel 中有一个典型的存储库模式结构。以水果模型为例我有:

EloquentFruitRepository 类扩展了实现 FruitRepositoryInterface 的抽象 EloquentRepository

FruitRepositoryInterface 扩展 RepositoryInterface

最后,RepositoryInterface 定义了那些通用/共享方法,如 allfindwithcreate

我已经阅读了关于 Laravel 5 中存储库模式的所有内容。我审查了所有 GitHub 项目并审查了所有关于它的要点并且......我有顾虑。

我喜欢只使用叙述方法的方法,如果我的 Fruit 模型应该位于 EloquentFruitRepository 中。

所以在我的 Controller 中而不是构建像这样的东西:

$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();
}

所以一般来说,所有这些通用方法应该只在特定的 Eloquent 存储库中使用,还是也可以在 Controller 中使用它们?

目前两种方式都有效。我问的是最佳(最好的)实践,而不是任何人的偏好。

我们应该只在 Controller 中使用叙述方法吗?

感谢任何反馈。

最佳答案

您正在寻找“最佳”实践,但您可能知道,当谈到设计模式时,并没有适合所有情况的通用“最佳实践”

话虽这么说,一般规则是:当您需要在应用程序的多个点进行查询时,将其放在存储库中。如果您只需要一次,由您决定

我也会将它放在存储库中,但我会使用更短且更易读的名称来命名该方法,即:getAvailableYellowFruits。对我来说,“with”和“order by”部分可以忽略不计,如果你愿意,你可以随时将该信息放在方法的注释中

关于php - 在 Laravel 5.x 中使用存储库模式时,我们应该只在 Controller 中使用叙述方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37151419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com