メインコンテンツまでスキップ

エンティティ/値オブジェクトの切り分け 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(最低限:コミットの習慣)🌿
  • 🧪 ミニ演習:DomainTests を分けたソリューション構成を作る📁

  • 🤖 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の状態遷移メソッドを作る🔁


第15章:ID設計(GuidでOK?型付きIDって何?)🆔🧷

  • 🎯 目標:IDの扱いで事故らない

  • ✅ 学ぶこと

    • Guid採用の現実的メリット🙂
    • OrderId みたいな型付きIDで取り違え防止🚧
  • 🧪 ミニ演習:OrderId VO(または専用型)を作る🆔✨


第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ブロック)

    1. 永続化の考え方:VOは値として保存(分解/変換)🗄️
    2. EF Coreの実装:Owned/ValueConverterの最小ライン🙂
    3. テスト戦略:VOは単体、Entityは状態遷移、必要ならDB統合🧪
    4. リファクタ手順:プリミティブ→VOへ段階移行🧹✨
  • 🧪 最終課題:既存のstring/intだらけOrderを、VO導入で改善する💎🧾

  • 🤖 AI活用(超実用)

    • VO雛形&テスト雛形を生成して時短🕒
    • 「レビュー観点チェック(不変/等価/責務)」をAIに出させて人間が判断✅

追加の“運用メモ”📌✨(学習がラクになるやつ)

  • 章ごとに **「まとめ1分」+「ミニ演習10分」**のテンポが最強⏱️💪
  • 演習は毎回「小さく成功」させるのが大事🌸
  • AIは便利だけど、ルール(不変条件)は自分で決めるのがキモだよ〜🤖➡️🧠✨