2014-10-08 16 views
5

Così ho recentemente iniziato a utilizzare il modello di repository nei miei progetti di lavoro. Continuo a imbattersi nella stessa domanda a cui non riesco a trovare una risposta:Repository Laravel all'interno di altri repository

È OK iniettare un altro repository in un repository esistente? Quali sono gli effetti negativi di farlo?

Per esempio:

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

Ci sono alcuni metodi all'interno della CrawlsRepository che proprio hanno di utilizzare il modello Archive, che significa che ha bisogno di usare il ArchiveRepository a mantenere il modello.

Che cosa voi ragazzi/ragazze fanno in queste situazioni? Mi sento come se mi mancasse qualcosa qui, ho letto prima, la gente dice che se senti la necessità di inserire un altro repository, quindi valuta il tempo hai davvero bisogno di 2 repository separati, in primo luogo lasciatemi rispondere in modo preventivo, io fare.

Grazie per qualsiasi direzione si può fornire! :)

risposta

3

Tecnicamente è ok per farlo. In effetti va bene perché stai usando l'integrazione delle dipendenze, quindi non sei legato a una sola implementazione.

Concettualmente, repository rappresenta wrapper per l'accesso all'origine dati. Quindi penso che sia giusto usare un altro repository per astrarre i dati recuperando ulteriormente.

D'altra parte quando si dice: There are certain methods inside the CrawlsRepository that just have to use the Archive Mode allora questi metodi NON DEVONO fare all'interno del CrawlsRepository. Appartengono al ArchiveRepository.

Il caso d'uso qui è quando si desidera restituire qualcosa che appartiene al vostro CrawlRepository, ma si desidera tornare Archives che sono collegati in qualche modo ai dati. In questo caso, il CrawlRepository DEVE chiamare il ArchiveRepository per raccogliere gli archivi necessari prima di tornare.

Ma ancora una volta, se un metodo solo bisogno del ArchiveRepository, allora sembra che si sta facendo male.

Spero che la mia spiegazione è abbastanza chiaro perché è piuttosto un argomento astratto e soggettivo.

+0

Eseguo delle dipendenze cicliche mentre eseguo l'iniezione del costruttore in modo estensivo. In questi casi, passo all'iniezione di setter – Arindam

Problemi correlati