2017-12-19 13 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標準に従う方法を持たせることができます。

私はここを参照してください問題は、私は、たとえば行うときにバックで何が起こるか...です:posts関係はその後Eloquentを介して呼び出された場合

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

これは、リポジトリのパターンを有する違反していますか?

Userモデルを介してロードされるすべての可能なリレーションを「実際の」リポジトリパターンが持つことは意味しますか?

+0

あなたはもはやリポジトリを使用していないので、インターフェイスでauthenticatedUserの戻り値として指定したものに関係します。 – Devon

+0

私の意見では、Eloquentのようなアクティブなレコードの実装で '真の'リポジトリパターンを使用しようとすると、雄弁なモデルそのものの複製がたくさん必要になるでしょう。あなたはすでにあなたのコードからそれを見ることができます。 私はそれが本当に努力の価値があるとは思わない – Teliov

答えて

1

DRYしてください。ここでは、Eloquentがすでに提供している多くのコードを複製するだけです。

しかし、呼び出しが複雑で、コードベース全体でロジックを繰り返さないようにするには、RepositoryPatternを使用することができます。

I.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

関連する問題