はじめに
こんにちは!DDDを楽しく学んだところで、今日はさらにステップアップして「ドメインモデルの設計方法」を詳しく見ていきましょう!
📚 ドメインモデルの設計ってどうやるの?
ドメインモデルを作るときには、「モノ(エンティティ・値オブジェクト)」と「コト(操作や振る舞い)」を具体的に整理していきます。
🧸 ドメインモデルを作る3つのポイント!
① エンティティ(識別できるモノ)
エンティティは「それがどれなのかを識別できるモノ」のこと。
例えば学校なら「生徒」や「先生」がエンティティ。生徒Aさんと生徒Bさんは別の人だよね。それをちゃんと区別するために、IDや番号を使うよ。
🎯 エンティティの例(生徒)
- 識別子(ID、生徒番号)
- 属性(名前、学年、クラス)
- 振る舞い(授業を受ける、宿題をする)
② 値オブジェクト(区別が必要ないモノ)
値オブジェクトは、特に区別する必要がない情報のこと。
例えば「クラスの名前」は値オブジェクト。1年1組という名前は、どれも同じ意味で使えるよね!
🍀 値オブジェクトの例(クラス名)
- 値(「1年1組」などのクラス名)
- 不変条件(1年~6年の範囲であること)
③ 情報(属性)と操作(振る舞い)
ドメインモデルでは、各エンティティや値オブジェクトがどんな情報を持っているか(属性)、どんな操作や動きができるか(振る舞い)を明確にします。
🌈 情報(属性)の例
- 生徒の名前、生徒番号、クラス
- 教室番号、設備の有無
🌟 操作(振る舞い)の例
- 生徒が授業を受ける、宿題を提出する
- 教室で授業を開催する、掃除をする
④ 不変条件(必ず守るルール)
ドメインモデルには、必ず守るルール「不変条件」があるよ!
例えば、学校のクラス名なら「1年~6年までしか使えない」など、絶対に守らないといけない条件があるんだ。
📝 不変条件の例
- 生徒番号は重複しない
- クラスは1年~6年のみ使える
🎨 実際の設計手順は?
- ドメインを整理する(学校なら生徒、先生、教室など)
- エンティティと値オブジェクトを決める(識別が必要かどうかで分ける)
- 各オブジェクトが持つ情報(属性)と操作(振る舞い)を決める
- 不変条件(絶対に守るべきルール)を設定する
🚀 ドメインモデルを設計するメリット
- 明確なルールができて、混乱が減る!
- チームみんなが同じ理解でスムーズに作業できる!
- 後から機能を追加しても、きれいに整理できる!
次はリポジトリの設計編です✨😄🚀