- Laravel におけるリポジトリ実装のポイント
・インターフェイスによるリポジトリ抽象化
・リポジトリでの複数テーブル
・リポジトリでのPaginator - Laravel で Service 層を取り入れるときに検討したいこと
・Service // Serviceには2種類あって厳格に区別されるよ
・アプリケーションService(ユースケース) // アプリの単機能モジュールだよ。コントローラでこれを実行するよ
・ドメインService // 仕様による閾値・バリデーション。→コードが仕様を語るよ - Laravelでドメイン駆動設計(DDD)を実践し、Eloquent Model依存の設計から脱却する
・Entity // 単にModelではないよ。例として、userテーブルがあり権限によって管理者と利用者で振る舞いが異なるなら。→ Entityは管理者、利用者と2つのEntityを作るよ。
・ViewObject(値オブジェクト) // 値のバリデーションや制約定義オブジェクト。例としてメールアドレスなど。コードが仕様を雄弁に語るよ
・アプリケーションService(ユースケース) の実装
DDDは改修や拡張しやすさを目指したシステム設計のノウハウであってそれが大正義ではなくて。
当然パターンは崩して利用して良いということ🐱🌻
予算がなくて短納期だったらEntity, ViewObject実装は省くとか。
リポジトリの注意
- 機械的にCRUDを実装しない
削除がない場合はremove()メソッドを実装しない
ValueObjectの注意
- 制約があるものだけValueObjectを生成する
Entityの注意
- 一覧の取得はEntityを経由せずに、Queryで行い連想配列で扱う