Open3
DDDについて(Golang)

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

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

最初からガチガチにやるのは効率悪いから、あえてあとで切り出すようにした方が良さそう
✅ 具体的な割り切りパターン
処理内容 | 初期はここに書く | 使い回し出てきたら |
---|---|---|
DB重複チェック | usecase | domain service に昇格 |
入力バリデーション | valueobject や usecase | validator層 or middleware |
複雑な構築処理 | usecase | factory に昇格 |
汎用整形 | util | そのままutilでOK |