Laravel! 頑張る! DDDもどき!

Laravel! 頑張る! DDDもどき!

Created
Jan 23, 2021 3:28 PM
Tags

DDDもどき

ここではドメイン駆動開発に関してのテクニック、ノウハウ、考えた方資料などをまとめて行きます。

書籍

玉堀のおすすめを貼ります。

頑張れる人向け

参考リポジトリ

参考サイト

ポイント

  • リポジトリパターン
  • オニオンアーキテクチャ
  • モデリング大事!!
  • 業務の理解大事!!
  • ビジネスサイドと話し合い、共通言語を作る
  • 共通言語をクラスに再現する。それがドメインオブジェクトになる
  • これが一番大変。。ここがグダグダしていると良い実装ができない。。
  • クラスの数がめちゃくちゃ増えます。。

クラス設計

  • コントローラークラス
    • HTTPリクエストの取り回し対応
    • viewに値を渡す場合viewmodelクラスを使う(こだわる場合)
  • パラメータークラス
    • 入力で使う
    • 命名は適当。
    • 用途はユーザーの入力値をラップするデータオブジェクト
  • DTOクラス
    • 出力で使う
    • 命名は適当
    • ユースケースクラスがコントローラークラスにデータを渡すときにラップして使う
  • ユースケースクラス
    • リポジトリインターフェースクラスをコンストラクタインジェクションする
    • パラメータクラスをメソッドインジェクションする
    • 必要に応じてドメインサービスクラスをコンストラクタインジェクションする
    • ロジックは書かない!あくまでもドメインクラスのメソッドを利用するだけにとどめる
  • ドメインクラス
    • エンティティクラス
      • ドメインの主役。ロジックの置き場所
    • バリューオブジェクトクラス
      • 型定義のクラス
    • リポジトリインターフェイスクラス
      • データソースとやり取りするクラス
      • インターフェースの理由はデータソースが変わっても柔軟に対応できるようにするため
      • ドメインオブジェクトを返すようにする。Eloquentクラスは返さない
    • ドメインサービス
      • エンティティやバリューオブジェクトでは表現しにくい処理をここで書く
      • 取り扱い注意。基本はエンティティやバリューオブジェクトで対応する。最後の手段として使う場所
  • インフラストラクチャークラス
    • リポジトリインターフェースの具象クラス
    • データソースと直接やり取りするクラス
    • EloquentやQueryBuilderをゴリゴリ使って、データの保存やデータの問い合わせを行う