エンティティ/値オブジェクトの切り分け 24章:詳細アウトライン 📘✨
(前提:Windows+Visual Studio中心、必要ならVS Codeも併記OK/Copilot or Codex等AI導入済み🤖✨)
教材の題材は引き続き、ずっと同じ例で進むとラクなので 「学内カフェ注文アプリ」☕️🧾で統一!
全体の進め方(ざっくり)🗺️✨
- 前半:VO(値オブジェクト)を体で覚える💎
- 中盤:Entity(エンティティ)に“ルール”を乗せる🆔
- 後半:境界(DTO/DB/テスト/リファクタ)で崩れない形🧱🧪
第1章:まず全体像!Entity/VOって何が嬉しいの?🤔🌟
-
🎯 目標:Entity/VOの違いを“言葉で説明できる”ようにする
-
✅ 学ぶこと
- Entity=**同一性(ID)**で追う🆔
- VO=値そのもので扱う💎
- 何が嬉しい?:バグ減る/変更が怖くない🛡️
-
🧪 ミニ演習:カフェアプリに出てくる「モノ」を10個書き出す✍️☕️
-
🤖 AI活用:AIに「Entity/VOの違いを高校生向けに説明して」と頼んで比べる🧠
第2章:開発環境セットアップ(Windows)🪟🛠️
-
🎯 目標:学習用のプロジェクトを“迷わず動かせる”状態にする
-
✅ 学ぶこと
- Visual Studioで .NET 最新SDK前提の作業🎛️
- 単体テストプロジェクト(xUnit想定)🧪
- Git(最低限:コミットの習慣)🌿
-
🧪 ミニ演習:
DomainとTestsを分けたソリューション構成を作る📁 -
🤖 AI活用:AIに「学習用の最小構成のソリューション構成案」を出してもらう🧩
第3章:題材を決めて“言葉”を揃える(超かんたんユビキタス言語)🗣️☕️
-
🎯 目標:モデル化する前に、用語のブレを減らす
-
✅ 学ぶこと
- 注文=Order、注文明細=OrderLine、金額=Money…みたいに統一📌
- “同じ単語でも意味が違う”事故を防ぐ🧯
-
🧪 ミニ演習:用語集を10個作る(日本語+英語)📓✨
-
🤖 AI活用:AIに「用語集の候補」を出してもらって取捨選択✂️
第4章:「同じ」の意味を分けよう(同一性 vs 等価性)🧠🔍
-
🎯 目標:「同じ注文」と「同じ金額」が違う理由を理解する
-
✅ 学ぶこと
- 同一性(IDで追う)🆔
- 等価性(値が同じなら同じ)💎
- 例:OrderはID、Moneyは値
-
🧪 ミニ演習:OrderとMoneyで「同じ判定条件」を書く✍️
第5章:Entity入門(ID・更新・履歴)🆔🧍♀️
-
🎯 目標:Entityの特徴をつかむ
-
✅ 学ぶこと
- Entityは状態が変わっても“同じ本人”📌
- ライフサイクル(作成→更新→削除/無効化)🔁
-
🧪 ミニ演習:Orderに入る“変わる情報”を整理する🧾📝
第6章:Value Object入門(不変・自己検証・等価性)💎✅
-
🎯 目標:VOの3大特性をセットで覚える
-
✅ 学ぶこと
- 不変(基本変えない)🔒
- 自己検証(作るときにルール確認)🧪
- 等価性(値で比較)✨
-
🧪 ミニ演習:Email/Money/DateRangeのルールを言語化する📧💰📅
第7章:C#でVOを“気持ちよく”書くための道具箱🧰✨
-
🎯 目標:VO実装に必要なC#の機能を“使える形”で知る
-
✅ 学ぶこと
recordの考え方(値っぽい)🧩- null安全(Nullable参照型)🚧
- 不変に寄せる書き方(private set回避)🔒
-
🧪 ミニ演習:
EmailをVOとして作る(コンストラクタで検証)📧 -
🤖 AI活用:AIに「recordでEmail VOを作って、注意点もコメントで」と頼む📝
第8章:等価性をちゃんと理解(比較・辞書・Hashの話)🧷✨
-
🎯 目標:VOがコレクションで壊れない理由を理解する
-
✅ 学ぶこと
Equals/GetHashCodeの雰囲気🧠- Dictionary/HashSetでの挙動(超重要)📦
- “ミュータブルVO”が危険な理由😱
-
🧪 ミニ演習:MoneyをHashSetに入れて検証🧪
第9章:VO実装① Email(バリデーションの基本)📧✅
-
🎯 目標:「作れた時点で正しい」を体感する
-
✅ 学ぶこと
- 形式チェックの最小ライン(やりすぎない)🙂
- 例外にする?Resultにする?の入口🚪
-
🧪 ミニ演習:無効なEmailは生成できないようにする🚫📧
-
🤖 AI活用:AIにテストケース案を出してもらう🧪✨
第10章:VO実装② Money(通貨・丸め・演算)💰🧮
-
🎯 目標:Moneyを“ただのdecimal”から卒業する
-
✅ 学ぶこと
- Amount+Currencyの2要素💰🌍
- 足し算・比較のルール(同通貨のみ等)⚖️
- 丸めの考え方(入門レベルでOK)🙂
-
🧪 ミニ演習:Money同士の加算と比較を実装する➕✨
第11章:VO実装③ Quantity / Percentage / Code(よく出る形)📦💎
-
🎯 目標:VOの量産ができるようになる
-
✅ 学ぶこと
- 1以上、0〜100、固定桁…みたいな制約🎯
- “プリミティブ地獄”を減らす発想🚫🔢
-
🧪 ミニ演習:Quantity VO+テストを作る📦🧪
第12章:VOの作り方パターン集(Factory/Parse/TryCreate)🏭🧩
-
🎯 目標:入力がstringでも安全にVO化できる
-
✅ 学ぶこと
Create/TryCreate/Parseの使い分け🔁- 入口で検証→中は安心✨
-
🧪 ミニ演習:DTOのstringからVOを生成する関数を作る🧾➡️💎
第13章:エラー設計の超入門(例外?Result?どこで返す?)⚠️🧠
-
🎯 目標:バリデーション失敗を“設計として扱う”
-
✅ 学ぶこと
- ドメインエラー vs 入力エラーの感覚🚦
- 例外は乱発しない(境界で整理)🧹
- 学習用の落とし所:VO生成失敗はResultで返すのもアリ🙂
-
🧪 ミニ演習:Email作成失敗をResultで返してUI側に出す📧➡️🖥️
第14章:Entityに“ルール”を置く(貧血モデル回避)💪🧾
-
🎯 目標:Entityを「データ入れ物」から卒業
-
✅ 学ぶこと
- Orderに
Confirm()Cancel()を持たせる✅❌ - ルールはEntity内で守る🔒
- Orderに
-
🧪 ミニ演習:Orderの状態遷移メソッドを作る🔁
第15章:ID設計(GuidでOK?型付きIDって何?)🆔🧷
-
🎯 目標:IDの扱いで事故らない
-
✅ 学ぶこと
- Guid採用の現実的メリット🙂
OrderIdみたいな型付きIDで取り違え防止🚧
-
🧪 ミニ演習:
OrderIdVO(または専用型)を作る🆔✨
第16章:不変条件① VOで守る(無効状態を作れない)🔒💎
-
🎯 目標:VOの強さ=不変条件を体感
-
✅ 学ぶこと
- “入口で弾く”が一番安い💰
- Guard(チェック関数)の基本🛡️
-
🧪 ミニ演習:Moneyが負になれないようにする🚫💰
第17章:不変条件② Entityで守る(状態とルール)🧾🔒
-
🎯 目標:Entityのルールを散らさない
-
✅ 学ぶこと
- Confirm後は明細変更できない、などの業務ルール📌
- “どこで守る?”→Entityのメソッド内が基本🏠
-
🧪 ミニ演習:Confirm後にAddLineできないようにする🚫🧾
第18章:状態機械(State Machine)超入門:表にしてみる📊🔁
-
🎯 目標:状態遷移の抜け漏れを減らす
-
✅ 学ぶこと
- 状態(Draft/Confirmed/Canceled…)🟡🟢🔴
- 許可される遷移の一覧化✅
-
🧪 ミニ演習:状態遷移表を作って、禁止遷移を3つ見つける🔍
第19章:集約① “一緒に守る範囲”って何?(超やさしい)📦🌸
-
🎯 目標:Aggregateの雰囲気だけ掴む
-
✅ 学ぶこと
- “同一トランザクションで守る範囲”の感覚🧠
- 集約ルート経由でしか更新させない🚪
-
🧪 ミニ演習:Order配下の更新ルールを言葉で書く✍️
第20章:集約② Order/OrderLine設計(VOの置き場所)🧾📦
-
🎯 目標:Orderモデルを“それっぽく”完成させる
-
✅ 学ぶこと
- OrderLineはEntity?VO?判断の練習🧠
- Money/QuantityはVOとして埋め込む💎
-
🧪 ミニ演習:Orderに「明細追加」「合計計算」を実装する➕💰
第21章:判断チェックリスト① “判断軸”を作る✅🧭
-
🎯 目標:迷った時に戻れる軸を持つ
-
✅ 学ぶこと
- Entity判定:ID/履歴/更新/同一性🆔
- VO判定:不変/値比較/自己完結💎
-
🧪 ミニ演習:チェックリストを自分用に5行でまとめる📝
第22章:判断チェックリスト② 分類クイズで定着🎯🧠
-
🎯 目標:判断を“反射レベル”にする
-
✅ 学ぶこと
- 住所、氏名、学籍番号、注文番号、クーポン…を分類✂️
- “境界条件”の考え方(どっちでもあり得る)🙂
-
🧪 ミニ演習:15問クイズ(理由も一言書く)✍️✨
第23章:境界① DTO/API/画面入力 → ドメイン変換🌉🧾
-
🎯 目標:ドメインを汚さない“入口”の作り方を知る
-
✅ 学ぶこと
- 入力はstring/int地獄になりがち😅
- 入口でVO化して検証→中はスッキリ✨
- 失敗理由をユーザーに返す(UX)🫶
-
🧪 ミニ演習:CreateOrderRequest(DTO)→ Order生成の流れを書く🛠️
第24章:境界② 永続化&テスト&リファクタ&AI(総仕上げ)🎓✨
※ここは「章としては1つ」だけど、中身は“仕上げ回”として丁寧に段取り化するよ〜!😆
-
🎯 目標:現実運用で崩れない形にする
-
✅ 学ぶこと(4ブロック)
- 永続化の考え方:VOは値として保存(分解/変換)🗄️
- EF Coreの実装:Owned/ValueConverterの最小ライン🙂
- テスト戦略:VOは単体、Entityは状態遷移、必要ならDB統合🧪
- リファクタ手順:プリミティブ→VOへ段階移行🧹✨
-
🧪 最終課題:既存のstring/intだらけOrderを、VO導入で改善する💎🧾
-
🤖 AI活用(超実用)
- VO雛形&テスト雛形を生成して時短🕒
- 「レビュー観点チェック(不変/等価/責務)」をAIに出させて人間が判断✅
追加の“運用メモ”📌✨(学習がラクになるやつ)
- 章ごとに **「まとめ1分」+「ミニ演習10分」**のテンポが最強⏱️💪
- 演習は毎回「小さく成功」させるのが大事🌸
- AIは便利だけど、ルール(不変条件)は自分で決めるのがキモだよ〜🤖➡️🧠✨