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

5 dependency-injection repository-pattern laravel

所以我最近开始在我的工作项目中使用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
    }
}
Run Code Online (Sandbox Code Playgroud)

还有里面的一些方法CrawlsRepository,只是必须使用归档模式,这意味着它需要使用ArchiveRepository到维护模式.

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

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

Atr*_*eur 3

从技术上讲,这样做是可以的。事实上,这很好,因为您正在使用依赖项注入,因此您不会只依赖于一种实现。

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

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

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

但同样,如果一个方法只需要 ArchiveRepository,那么你似乎做错了。

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