Laravel リポジトリパターンの実装

DB操作に関連するスマートな実装パターンであるリポジトリパターンについてかいてみようかと思います。

リポジトリパターンとは

データの操作に関連するロジックをビジネスロジックから切り離し、抽象化したレイヤに任せることで保守や拡張性を高めるパターンです。 (必ずしもDB操作のロジックのみを留めるパターンというわけではないそうです。)

Laravelにリポジトリパターンを取り入れることで、

  • テストがしやすくなる
  • DBエンジンの変更に対応しやすくなる
  • データ操作のロジックが1箇所にまとまり、管理しやすくなる

といったメリットを得ることができます。

リポジトリパターンの実装

Modelと同じ単位でRepositoryディレクトリを作成します。(賛否両論あるかもです)

今回は以下のような構成でリポジトリパターンを実装していきます。

インターフェース設計

まずはインターフェースを設計します。

インプリメント(実装)クラス

続いて実装クラスを用意します。 ここでは対応するモデルのDIとメソッドの実装を行います。

ここから更にService層を用意してクラスを追加し、抽象度を高める場合もあるようですが、今回はこの2つのクラスのみで実装していくことにします。

Service Provider

AppServiceProvider.phpにインターフェースと実装クラスを登録します。

Controllerで呼び出す

実装したリポジトリパターンを使用します。

インターフェースをインジェクションするだけです!

所感

モデルもコントローラーもすっきりしました。 これを機にDDDの勉強もしたいです。

参考