DB操作に関連するスマートな実装パターンであるリポジトリパターンについてかいてみようかと思います。
リポジトリパターンとは
データの操作に関連するロジックをビジネスロジックから切り離し、抽象化したレイヤに任せることで保守や拡張性を高めるパターンです。 (必ずしもDB操作のロジックのみを留めるパターンというわけではないそうです。)
Laravelにリポジトリパターンを取り入れることで、
- テストがしやすくなる
- DBエンジンの変更に対応しやすくなる
- データ操作のロジックが1箇所にまとまり、管理しやすくなる
といったメリットを得ることができます。
リポジトリパターンの実装
Modelと同じ単位でRepositoryディレクトリを作成します。(賛否両論あるかもです)
今回は以下のような構成でリポジトリパターンを実装していきます。
インターフェース設計
まずはインターフェースを設計します。
インプリメント(実装)クラス
続いて実装クラスを用意します。 ここでは対応するモデルのDIとメソッドの実装を行います。
ここから更にService層を用意してクラスを追加し、抽象度を高める場合もあるようですが、今回はこの2つのクラスのみで実装していくことにします。
Service Provider
AppServiceProvider.phpにインターフェースと実装クラスを登録します。
Controllerで呼び出す
実装したリポジトリパターンを使用します。
インターフェースをインジェクションするだけです!
所感
モデルもコントローラーもすっきりしました。 これを機にDDDの勉強もしたいです。