2017-12-19 9 views
1

Laravel에서 저장소 패턴을 구현 중이며 구현에 대해 질문이 있습니다.Laravel 실제 저장소 패턴

public function create(array $properties) 
{ 
    return $this->entity->create($properties); 
} 

public function update($id, array $properties) 
{ 
    return $this->find($id)->update($properties); 
} 

public function delete($id) 
{ 
    return $this->find($id)->delete(); 
} 

그리고 내 사용자와 뭔가를 할 필요가 이제까지 그 저장소를 주입 :

예를 들어, 나는 UserRepository 클래스 Eloquent 표준에 따라 방법을 만들 수 있습니다.

내가 예를 들어 수행 할 때 뒤에 무슨 내가 여기 볼 문제 ... :

$this->userRepository->authenticatedUser()->posts 

이는 posts 관계는 다음 Eloquent를 통해 호출하면 저장소 패턴을 갖는 위반 하는가?

User 모델을 통해로드되는 모든 가능한 관계를 "실제"저장소 패턴이 갖는 것을 의미합니까?

+0

더 이상 저장소를 사용하지 않으므로 인터페이스의 authenticatedUser에 대한 반환 값으로 지정하는 것과 관련이 있습니다. – Devon

+0

필자의 의견으로는 Eloquent와 같은 활성 레코드 구현과 함께 '진정한'저장소 패턴을 사용하려는 시도는 웅변적인 모델 자체의 많은 복제물을 필요로합니다. 이미 코드에서 볼 수 있습니다. 나는 정말로 노력할만한 가치가 있다고 생각하지 않는다. – Teliov

답변

1

DRY로 유지하십시오. 여기서 Eloquent가 이미 제공하는 많은 코드를 복제하면됩니다.

그러나 호출이 더 복잡하고 코드베이스 전체에서 논리를 반복하지 않으려는 경우 RepositoryPattern을 사용할 수 있습니다.

e.e.

public function clientContact($clientId) { 
    return \Auth::user()->manager()->superBoss()->company()->clients()->where('client_id', $clientID)->primaryContact()->firstOrFail(); 
} 

이 경우에는 의미가 있습니다.

하지만 인증 된 사용자의 게시물을 원한다면 웅변적인 관계로 작업하면됩니다.

$posts = \Auth::user()->posts()->get(); 
+0

내 자신의 견해로는 언젠가는 "이봐, 다른 ORM과 격식을 바꾸자"라고 말할 가능성은 거의 없다! 즉, 저는 Laravel에서 저장소 패턴을 완전히 무시합니다. 그러나 회사에서 구현 작업을 수행하라는 요청을 받았기 때문에 최선의 방법이 무엇인지 알아야합니다. – Norgul

+0

@ Norgul 흠,이 경우에는 모든 것을 처리하는 어댑터와 어쩌면 관계를 생성해야 할 수도 있습니다. 즉 https://github.com/bosnadev/repository와 같은 것을 만드십시오. 따라서 무언가가 변경되면 어댑터 만 수정하면됩니다. https://sourcemaking.com/design_patterns/adapter/php – hogan