2014-10-08 15 views
5

So habe ich vor kurzem begonnen, das Repository-Muster in meinen Arbeitsprojekten zu verwenden. Ich laufe immer wieder auf dieselbe Frage ein, auf die ich keine Antwort finden kann:Laravel Repositories in anderen Repositories

Ist es in Ordnung, ein anderes Repository in ein vorhandenes Repository zu injizieren? Was sind die negativen Auswirkungen?

Zum Beispiel:

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 
    } 
} 

Es gibt bestimmte Methoden in den CrawlsRepository, die gerade hat das Archiv Modell zu verwenden, was bedeutet es die ArchiveRepository verwenden muss das Muster zu halten.

Was macht ihr in diesen Situationen? Ich habe das Gefühl, dass ich etwas verpasse hier, ich habe schon gelesen, Leute sagen, dass, wenn Sie das Bedürfnis haben, ein anderes Repository zu ziehen, dann bewerten Sie, dass Sie wirklich 2 separate Repositories benötigen, lassen Sie mich präventiv antworten, ich machen.

Danke für jede mögliche Richtung, die Sie zur Verfügung stellen können! :)

Antwort

3

Technisch ist es in Ordnung, dies zu tun. In der Tat ist es gut, weil Sie Dependency-Injection verwenden, so dass Sie nicht nur an eine Implementierung gebunden sind.

Konzeptionell stellt Repository Wrapper um den Datenquellenzugriff dar. Daher denke ich, dass es in Ordnung ist, ein anderes Repository zu verwenden, um das Abrufen von Daten weiter zu abstrahieren.

Auf der anderen Seite, wenn Sie sagen: There are certain methods inside the CrawlsRepository that just have to use the Archive Mode dann haben diese Methoden nichts im CrawlsRepository zu tun. Sie gehören zum ArchiveRepository.

Der Anwendungsfall ist hier, wenn Sie etwas zurückgeben möchten, das zu Ihrem CrawlRepository gehört, aber Sie möchten Archive zurückgeben, die in irgendeiner Weise mit Ihren Daten verknüpft sind. In diesem Fall muss das CrawlRepository das ArchiveRepository aufrufen, um die benötigten Archive vor der Rückkehr zu sammeln.

Aber noch einmal, wenn eine Methode nur das ArchiveRepository benötigt, dann scheint es, dass Sie es falsch machen.

Ich hoffe, meine Erklärung ist klar genug, weil es ein ziemlich abstraktes und subjektives Thema ist.

+0

Ich laufe in zyklischen Abhängigkeiten während der Konstruktorinjektion ausgiebig. In solchen Fällen wechsele ich zur Setter-Injektion – Arindam