我正在尝试学习存储库模式,似乎让我自己有点混淆,因为我急于加载关系时如何使用这个存储库模式,并将数据库逻辑保留在我的控制器之外。Laravel - 使用存储库模式
我的存储库/应用程序结构的快速概览。
app/
Acme/
Repositories/
RepositoryServiceProvider.php
Product/
EloquentProduct.php
ProductInterface.php
Category/
EloquentCategory.php
CategoryInterface.php
例ProductInterface.php
<?php namespace GD\Repositories\Product;
interface ProductInterface
{
public function all();
public function find($id);
public function findBySlug($slug);
}
例CategoryInterface.php
<?php namespace GD\Repositories\Category;
interface CategoryInterface
{
public function all();
public function find($id);
public function findBySlug($slug);
}
好了,所以比较容易的部分是利用DI喷射模型的依赖关系到控制器中。
列出所有类别与相关产品更困难,因为我不再使用雄辩模型。我正在使用一个没有公开所有雄辩方法的界面。
这不会没有我实现我的EloquentCategory类中方法工作...
public function show($slug)
{
return Response::json($this->category->findBySlug($slug)->with('products'), 200);
}
我应该创建一个单独的服务类两个储存粘合在一起?例如允许以下内容
public function __construct(ShopService $shop)
{
$this->shop = $shop;
}
public function show($slug)
{
return Response::json($this->shop->getProductsInCategory($slug), 200);
}
或者,我是否应该在我的Category Repository中实现with方法?
public function with($relation)
{
return Category::with($relation);
}
最后,我是否理解了Repository Pattern的用法正确?
app/Acme/etc ...有人来自laracasts:P –