Created
Jan 23, 2021 3:28 PM
Tags
DDDもどき
ここではドメイン駆動開発に関してのテクニック、ノウハウ、考えた方資料などをまとめて行きます。
書籍
玉堀のおすすめを貼ります。
頑張れる人向け
参考リポジトリ
参考サイト
ポイント
- リポジトリパターン
- オニオンアーキテクチャ
- モデリング大事!!
- 業務の理解大事!!
- ビジネスサイドと話し合い、共通言語を作る
- 共通言語をクラスに再現する。それがドメインオブジェクトになる
- これが一番大変。。ここがグダグダしていると良い実装ができない。。
- クラスの数がめちゃくちゃ増えます。。
クラス設計
- コントローラークラス
- HTTPリクエストの取り回し対応
- viewに値を渡す場合viewmodelクラスを使う(こだわる場合)
- パラメータークラス
- 入力で使う
- 命名は適当。
- 用途はユーザーの入力値をラップするデータオブジェクト
- DTOクラス
- 出力で使う
- 命名は適当
- ユースケースクラスがコントローラークラスにデータを渡すときにラップして使う
- ユースケースクラス
- リポジトリインターフェースクラスをコンストラクタインジェクションする
- パラメータクラスをメソッドインジェクションする
- 必要に応じてドメインサービスクラスをコンストラクタインジェクションする
- ロジックは書かない!あくまでもドメインクラスのメソッドを利用するだけにとどめる
- ドメインクラス
- エンティティクラス
- ドメインの主役。ロジックの置き場所
- バリューオブジェクトクラス
- 型定義のクラス
- リポジトリインターフェイスクラス
- データソースとやり取りするクラス
- インターフェースの理由はデータソースが変わっても柔軟に対応できるようにするため
- ドメインオブジェクトを返すようにする。Eloquentクラスは返さない
- ドメインサービス
- エンティティやバリューオブジェクトでは表現しにくい処理をここで書く
- 取り扱い注意。基本はエンティティやバリューオブジェクトで対応する。最後の手段として使う場所
- インフラストラクチャークラス
- リポジトリインターフェースの具象クラス
- データソースと直接やり取りするクラス
- EloquentやQueryBuilderをゴリゴリ使って、データの保存やデータの問い合わせを行う