【问题标题】:Laravel Repositories inside other repositories其他存储库中的 Laravel 存储库
【发布时间】:2014-12-03 07:15:28
【问题描述】:

所以我最近开始在我的工作项目中使用存储库模式。我一直遇到同样的问题,我似乎找不到答案:

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

例如

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 来维护模式。

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

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

【问题讨论】:

    标签: laravel dependency-injection repository-pattern


    【解决方案1】:

    从技术上讲,这样做是可以的。事实上,这很好,因为您使用的是依赖注入,因此您不会只绑定到一个实现。

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

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

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

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

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

    【讨论】:

    • 我在大量进行构造函数注入时遇到了循环依赖。在这种情况下,我会切换到 setter 注入
    猜你喜欢
    • 2010-11-23
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 1970-01-01
    • 1970-01-01
    • 2015-04-26
    相关资源
    最近更新 更多