2014-05-18 2 views
0

하나가Laravel - 유연한 컨트롤러 및 저장소

  1. interface UserInterface
  2. 만들기 (테이블 User 말할) 다음을 수행 할 것, 유연한 컨트롤러를 만들려면 및 Laravel의 IOC의를 사용하는 class EloquentUserRepository implements UserInterface
  3. App::bind하여 implement

interface하지만, 당신은 또한 모드를 만들 l UserEloquent으로 확장되며 따라서 EloquentUserRepository은 기본적으로이 모델을 호출합니다. 제공된 Eloquent 함수 이외에 User에 사용자 지정 함수 또는 관계를 만드는 경우 EloquentUserRepository에 함수를 만들어서 간단하게 반환해야합니다. 그게 반복되지 않니? 직접 인터페이스 모델을 구현할 수있는 방법이 있습니까?

+0

[이것은 당신이 찾고있는 것입니다] (http://heera.it/laravel-repository-pattern#.U3iQO_mSySo)라고 생각합니다. –

+0

아니요,이 예제의'UserRepository'는 함수를'User' 모델에 연결합니다. 그것은 반복적입니다. 그것들은 하나이고 똑같습니다. 나는 그 단계를 제거하고 싶다. – Kousha

답변

0

반복되지 않습니까?

예. 특정 요구 사항이없는 경우 - 응용 프로그램을 '오버 엔지니어링'또는 '오버 추상화'하는 위험을 감수 할 수 있습니다.

앞으로 '사용자'를 바꿀 계획이 없다면 그렇게 할 필요가 없습니다. 당신이 "할 수있다"는 말은 당신이 "해야"한다는 것을 의미하지 않습니다. 다음 모델은

class User extends Eloquent implements UserInterface 

을 수행하고 단지 완전히 저장소를 건너 -

당신은 후 UserInterface있을 수 있습니다.

+0

글쎄요, 요점은 앞으로 다른 DB에 대해 Eloquent를 교환하고 싶다면 쉽게 할 수 있다는 것입니다. 따라서 기본적으로 인터페이스를 구현하기위한 추상적 인 방법을 유지하고 싶습니다. 앞으로 다른 것을 생각하고 싶다면 앞으로 할 수 있습니다. 이 작업을 수행하기 위해 두 개의 파일 (모델 및 저장소)을 만들고 싶지 않습니다. – Kousha

+0

Eloquent는 DB가 아닙니다. DB는 mySQl/PostSQL/Sqlite 등입니다. Eloquent는 DB 추상화 계층입니다. Eloquent를 사용하면 이미 DB를 교환 할 수 있습니다. Eloquent 자체를 추상적으로 표현하고자한다면 추상적으로 추상을 추상화하는 것입니다. – Laurence

+0

Kk, 그건 의미가 있습니다. 그러나 또 다른 문제 : 나이로 사람을 찾고 싶다고 말하면, Eloquent에서'queryAge ($ query, $ age)'를 사용할 수는 있지만 인터페이스에서'public function age ($ 나이)'. 'User'는'queryAge (...)'함수를 가지고 있지만 내 인터페이스는'age (...)'를 가지고 있기 때문에'User Extension extends UserInterface' 클래스를 사용하면 에러가 발생합니다. 이 문제를 어떻게 해결할 수 있습니까? – Kousha