其他存储库中的 Laravel 存储库

标签 laravel dependency-injection repository-pattern

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

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

例如 :

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 个单独的存储库,让我先发制人地回答这个问题,我做。

感谢您提供的任何方向! :)

最佳答案

从技术上讲,这样做是可以的。事实上,这很好,因为您使用的是依赖注入(inject),因此您不仅仅依赖于一种实现。

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

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

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

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

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

关于其他存储库中的 Laravel 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26260102/

相关文章:

laravel - 如何索引没有公共(public)链接的谷歌动态页面?

php - Laravel:使用路由/模型绑定(bind)时在表单请求中访问模型实例

java - 共享对象设计模式

mvvm - 依赖注入(inject)以及何时使用静态类

c# - 应用层和契约

php - 如何在 Laravel 中定义虚假价格、地址、图片

带有 uuid 的 Laravel 种子

c# - 在 MVC 核心 DI 中注册服务集合

asp.net-mvc - 存储库之间调用方法 - 存储库模式

oop - 对象集合、对象聚合、对象关联和对象组合之间有什么区别?