Open3

DDDについて(Golang)

ダイチ/ daichiダイチ/ daichi

ドメインのイメージ

  • エンティティ
    • 識別子を持ち、ライフサイクルのあるオブジェクト(例: User, Order)
  • 値オブジェクト(VO)
    • 値で比較される、概念的には使い捨てのオブジェクト(例: Email, Money)
    • バリデーション的な関数を集約させて、entityでNewするときに使う
┌──────────────┐
│ ドメイン(Domain) │  ← ビジネスの意味・振る舞い
└──────────────┘
      │
      ├── エンティティ(Userなど)
      ├── 値オブジェクト(Email, Address)
      ├── ドメインサービス(ShippingCostCalculatorなど)
      └── 集約、ファクトリ、リポジトリ...

ダイチ/ daichiダイチ/ daichi
  • プロジェクトが何を実現したいかによって、柔軟に設計すれば良い
    • 設計するにはドメイン知識が必要
    • お客さんが困っていることなども理解して設計しないと、目的を見失いがち
ダイチ/ daichiダイチ/ daichi

最初からガチガチにやるのは効率悪いから、あえてあとで切り出すようにした方が良さそう

✅ 具体的な割り切りパターン

処理内容 初期はここに書く 使い回し出てきたら
DB重複チェック usecase domain service に昇格
入力バリデーション valueobject や usecase validator層 or middleware
複雑な構築処理 usecase factory に昇格
汎用整形 util そのままutilでOK