2014-10-08 5 views
5

그래서 저는 최근에 내 프로젝트에서 리포지토리 패턴을 활용하기 시작했습니다. 나는 같은 질문에 계속 대답을 찾을 수없는 것 같습니다 :다른 리포지토리 내의 Laravel 리포지토리

다른 저장소를 기존 저장소에 주입해도 괜찮습니까? 이렇게하는 부정적인 영향은 무엇입니까? 예를를 들어

:

는 패턴을 유지하기 위해 ArchiveRepository를 사용할 필요가 의미 단지 보관 모델을 사용하는이있는 CrawlsRepository 내부의 특정 방법이있다
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 
    } 
} 

.

이런 상황에서 너희들/할아버지는 무엇을하나요? 내가 뭔가를 여기에서 놓치고있는 것처럼 느껴진다, 나는 전에 읽었다. 사람들이 다른 저장소를 끌어 와야 할 필요성을 느낀다면 날씨를 평가할 필요가있다. 처음에는 2 개의 별도 리포지토리가 필요하다. 선제 적으로 대답하자. 해야 할 것.

어떤 방향으로도 제공해 주셔서 감사합니다. :)

답변

3

기술적으로는 그렇게하는 것이 좋습니다. 실제로 의존성 삽입을 사용하고 있기 때문에 좋다. 그래서 한 구현에만 묶이지 않는다.

개념적으로 저장소는 데이터 소스 액세스를 둘러싼 래퍼를 나타냅니다. 따라서 다른 데이터 저장소를 사용하여 데이터 추출을 추상화하는 것이 좋습니다.

반면에 There are certain methods inside the CrawlsRepository that just have to use the Archive Mode이라고 말하면이 방법은 CrawlsRepository 내부에서 수행 할 작업이 없습니다. 이들은 ArchiveRepository에 속합니다.

여기의 유스 케이스는 CrawlRepository에 속한 것을 반환하고 싶지만 어떤 방식 으로든 데이터에 링크 된 아카이브를 반환하려는 경우입니다. 이 경우 CrawlRepository는 ArchiveRepository를 호출하여 반환하기 전에 필요한 아카이브를 수집해야합니다.

다시 말해, 메서드가 ArchiveRepository 만 필요하면 잘못된 것으로 보입니다.

꽤 추상적이고 주관적인 주제이기 때문에 설명이 명확 해지기를 바랍니다.

+0

생성자 삽입을 광범위하게 수행하는 동안 순환 종속성이 발생합니다. 나는 그런 경우에 세터 주입으로 전환한다. – Arindam