みなさん、こんにちは。ペアプログラミングに興味を持ち始めたt-odaです。

今回はリポジトリを作成します。リポジトリとはデータへのアクセスロジックのすべてを持つクラスになります。 例えば、Taskモデルであれば、TaskRepositoryクラスといった感じになります。そして、このリポジトリを依存注入することでコントローラーからアクセスロジックを取り除きます。

ただ、このような小規模なアプリケーションだとそこまでする必要はないですが、大規模になると重宝したりするので覚えておくといいかもしれないです。

※このリポジトリはGitのそれとは違いますので注意しましょう。

リポジトリクラスの作成

さっそく作っていくんですが、残念ながらこのクラスを作成するコマンドはありません。ということなので、自分で作りましょう。

まずappディレクトリ直下にRepositoriesディレクトリを作ります。そして、このディレクトリにリポジトリクラスを追加していくイメージです。今回はTaskRepository.phpだけです。

TaskRepository.php

一覧表示のためのforUser()がありますね。このメソッドは引数にUserインスタンスを取ります。 やっていることは前回のコントローラーに書いた処理と同じです。ユーザーIDを条件として全タスクを取得するという処理ですね。

これをTaskControllerで使うとこうなります。

次回予告

今回はかなり短めの内容でした。ただ、タスク一覧の処理を書き換えただけのようにも思われますが、もっと大きな規模のアプリケーション構築の際にきっと役立つはずです。

リポジトリはオブジェクト指向におけるデザインパターンのひとつ、リポジトリパターンで使われるクラスのことです。このパターンは、簡単に言うとアクセスロジックとビジネスロジックの分離です。

今回でいうタスクというデータにアクセスするロジックが多くのコントローラーで使われていたら、そのひとつひとつを修正しないといけくなります。

このようにリポジトリクラスがあれば、データベースエンジンが変わったり、データの取得方法に変更があったとしても、修正する部分はリポジトリクラスのみになります。修正箇所が膨大になることを防いでいるわけですね。

また、本来はインターフェースを実装したほうがいいです。実装クラスの差し替えができ、単体テストを簡単にしてくれます。

次回は、タスクを削除する機能を追加します。