【发布时间】:2014-03-15 09:11:37
【问题描述】:
我正在尝试学习存储库模式,但似乎对如何在急切加载关系并将数据库逻辑排除在我的控制器之外时如何使用此存储库模式感到有些困惑。
我的存储库/应用程序结构的快速概览。
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 类中实现 with 方法,这将无法工作...
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 );
}
或者,我应该在我的类别存储库中实现 with 方法吗?
public function with($relation)
{
return Category::with($relation);
}
最后,我对Repository Pattern的用法的理解正确吗?
【问题讨论】:
-
app/Acme/etc...有人来自 laracasts :P
标签: php service dependency-injection laravel repository-pattern