【りぽじとりぱたーん】

リポジトリパターン とは?

💡 データの出し入れ専門の倉庫番、ビジネスロジックをDB依存から解放
📌 このページのポイント
リポジトリパターン ビジネスロジック ドメイン層 DBの詳細を知らない UserRepository findById(id) save(user) delete(user) DB MySQL等 テスト時: モックに差し替え可能 ビジネスロジック (同じコード) MockUserRepository メモリ上の配列で動作 DB不要 高速テスト アクティブレコード: オブジェクト=DB操作 → リポジトリ: データとDB操作を分離
リポジトリパターンのイメージ
ひよこ ひよこ

リポジトリパターンってどんな設計なの?

ペンギン先生 ペンギン先生

データの取得や保存を専門に行うリポジトリクラスを作って、ビジネスロジックからDBの操作を切り離す設計だよ。たとえば UserRepository.findById(1) みたいに使うんだ

ひよこ ひよこ

アクティブレコードと何が違うの?

ペンギン先生 ペンギン先生

アクティブレコードはオブジェクト自身がDBを操作するけど、リポジトリパターンはデータオブジェクトとDB操作を別のクラスに分けるんだ。責任が分離されてテストしやすくなるよ

ひよこ ひよこ

テストしやすいってどういうこと?

ペンギン先生 ペンギン先生

リポジトリインターフェースで定義しておけば、テスト時にはメモリ上の配列で動くモックリポジトリに差し替えられる。DBなしで高速にテストできるんだ

ひよこ ひよこ

いつリポジトリパターンを使うべきなの?

ペンギン先生 ペンギン先生

DDDを採用する中〜大規模プロジェクトでは定番だね。ただ小規模なCRUDアプリだとオーバーエンジニアリングになることもある。リポジトリの中でクエリビルダーORMを使って、集約ルートの単位でデータを出し入れするのが理想的な使い方だよ

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「リポジトリパターン」って出てきたら「データの出し入れをビジネスロジックから分離する設計」と思えればだいたいOK!
📖 おまけ:英語の意味
「Repository Pattern」 = 貯蔵庫パターン
💬 Repository は「貯蔵庫」という意味で、データの保管庫を抽象化するイメージだよ
← 用語集にもどる