Laravel存储库位于其他存储库中

时间:2014-10-08 14:58:11

标签: laravel dependency-injection repository-pattern

所以我最近开始在我的工作项目中使用Repository模式。我一直在遇到一个我似乎无法找到答案的问题:

将另一个存储库注入现有存储库是否可以?这样做有什么负面影响?

例如

class CrawlsRepository implements CrawlsRepositoryInterface {

    public function __construct(ArchiveRepository $archive)
    {
        $this->archive = $archive;
    }

    ...

    ...

    public function getCrawlList()
    {
        // Do stuff with $this->crawl
        // Do stuff with $this->archive
    }
}

CrawlsRepository中的某些方法只有 才能使用存档模型,这意味着它需要使用ArchiveRepository来维护模式。

你们/ gals在这些情况下做了什么?我觉得我在这里遗漏了一些东西,我以前读过,有人说如果你觉得需要拉另一个存储库,然后评估天气你真的需要2个单独的存储库,让我先发制人地回答,我做。

感谢您提供的任何指示! :)

1 个答案:

答案 0 :(得分:3)

从技术上讲,这样做是可以的。实际上它是好的,因为你使用依赖注入,所以你不仅仅与一个实现绑定。

从概念上讲,repository表示围绕数据源访问的包装器。所以我认为使用另一个存储库来抽象进一步检索数据是可以的。

另一方面,当你说: There are certain methods inside the CrawlsRepository that just have to use the Archive Mode然后这些方法在CrawlsRepository中没有做任何事情。它们属于ArchiveRepository。

此处的用例是当您想要返回属于您的CrawlRepository的内容时,但您想要返回以某种方式链接到您的数据的Archives。 在这种情况下,CrawlRepository必须在返回之前调用ArchiveRepository来收集所需的存档。

但是,如果一个方法只需要ArchiveRepository,那么看起来你做错了。

我希望我的解释足够清楚,因为这是一个相当抽象和主观的话题。