2014-10-08 10 views
5

Tak więc ostatnio zacząłem wykorzystywać wzór repozytorium w moich projektach roboczych. Wciąż mam takie samo pytanie, na które nie mogę znaleźć odpowiedzi:Repozytoria Laravel wewnątrz innych repozytoriów

Czy można wprowadzić inne repozytorium do istniejącego repozytorium? Jakie są negatywne skutki takiego działania?

Na przykład:

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

Istnieją pewne metody wewnątrz CrawlsRepository że właśnie mają używać Archiwum modelu, co oznacza, że ​​musi korzystać z ArchiveRepository utrzymać wzór.

Co wy ludzie robicie w takich sytuacjach? Czuję, że coś tu pomijam, czytałem wcześniej, ludzie mówią, że jeśli czujesz potrzebę ściągnięcia innego repozytorium, a następnie ocenisz pogodę, na którą naprawdę potrzebujesz 2 oddzielnych repozytoriów, pozwól mi uprzedzająco odpowiedzieć na to pytanie. zrobić.

Dzięki za wskazówki, które możesz podać! :)

Odpowiedz

3

Technicznie można to zrobić w porządku. W rzeczywistości jest to dobre, ponieważ używasz wtrysku zależności, więc nie jesteś związany tylko z jedną implementacją.

Pod względem koncepcyjnym repozytorium reprezentuje opakowania wokół dostępu do źródła danych. Sądzę, że można użyć innego repozytorium do dalszego pobierania danych abstrakcyjnych.

Z drugiej strony, gdy mówisz: There are certain methods inside the CrawlsRepository that just have to use the Archive Mode, wtedy te metody nie mają ŻADNEGO zadania w CrawlsRepository. Należą do ArchiveRepository.

Przykładem użycia jest tutaj, gdy chcesz zwrócić coś, co należy do CrawlRepository, ale chcesz zwrócić Archiwa, które są w jakiś sposób powiązane z twoimi danymi. W tym przypadku CrawlRepository HAVE TO zadzwonić do ArchiveRepository, aby zebrać potrzebne archiwa przed powrotem.

Ale znowu, jeśli metoda wymaga tylko ArchiveRepository, wydaje się, że robisz to źle.

Mam nadzieję, że moje wyjaśnienie jest wystarczająco jasne, ponieważ jest to dość abstrakcyjny i subiektywny temat.

+0

Występuję cykliczne zależności podczas intensywnego wykonywania konstruktora wtrysku. W takich przypadkach przełączam się na zastrzyk ustawiający – Arindam

Powiązane problemy