LoginSignup
1
1

More than 3 years have passed since last update.

Laravel! 頑張る! DDDもどき!

Posted at

DDDもどき

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

書籍

tyamahoriのおすすめを貼ります。

現場で役立つシステム設計の原則 〜変更を楽で安全にするオブジェクト指向の実践技法

ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本

ドメイン駆動設計 モデリング/実装ガイド - little-hands - BOOTH

頑張れる人向け

エリック・エヴァンスのドメイン駆動設計

実践ドメイン駆動設計

.NETのエンタープライズアプリケーションアーキテクチャ第2版 .NETを例にしたアプリケーション設計原則

参考リポジトリ

anfangd/laravel-ddd-sample-for-beginners

参考サイト

[DDD]ドメイン駆動 + オニオンアーキテクチャ概略 - Qiita

ご主人様、小難しいDDDやクリーンアーキテクチャはお忘れになって、“削除しやすい設計”から始められてはいかが? - Qiita

Laravelでドメイン駆動設計(DDD)を実践し、Eloquent Model依存の設計から脱却する - Qiita

https://twitter.com/masuda220/status/1321700797042716672

https://designpatternsphp.readthedocs.io/ja/latest/README.html

ポイント

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

クラス設計

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1