所以我最近开始在我的工作项目中使用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个单独的存储库,让我先发制人地回答,我做。
感谢您提供的任何指示! :)
答案 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,那么看起来你做错了。
我希望我的解释足够清楚,因为这是一个相当抽象和主观的话题。