note: リポジトリパターン, CQRS と Laravel のインジェクションの流れ

概念を整理

リポジトリパターン

  • 解決したい問題
    • データストアの参照先が変わっても、プログラムの変更範囲を限定的にしたい
  • how

CQRS (コマンドクエリ責務分離)

  • 解決したい問題
    • レコード数の増大やデータベースクエリの複雑化に伴う応答速度の低下
  • how
    • コマンドとクエリを担当するデータベースは別物と考える

Laravel

  • インジェクションの流れ
Eloquent
↓
Query / Command
↓
Repository
↓
Service
↓
UseCase //ビジネスロジックをカプセル化, 実行時の振る舞いの仕様
↓
Controller
return View <- ViewVers <- ViewComposer <- Repository <- Query
// XxxContoller

public function __invoke(XxxFormRequest $request, XxxUseCase $usecase)
{
    $usecase($request->all());

    return view();
}