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

第22章:判断チェックリスト② 分類クイズで定着🎯🧠✨

(学内カフェ注文アプリ☕️🧾の世界で、判断を“反射”にしていくよ〜!)


0. まず結論:迷ったらこの3問だけでOK✅🧭

Entity / VO を迷ったときは、まずここから👇✨

  1. それが“同じ本人”として追跡される?(IDで追う?履歴が大事?)🆔 → YesならEntity寄り

  2. 値が同じなら“同じもの”でいい?(等価性でOK?)💎 → YesならVO寄り

  3. 変わると困るから“不変”で持ちたい?(作ったら基本変えない)🔒 → YesならVO寄り

ちなみに今は C# 14 が最新で .NET 10 対応だよ〜🧁✨(Visual Studio 2026 も .NET 10 SDK を含む) (Microsoft Learn)


1. 今日のゴール🎯✨

  • 15問をテンポよく分類して、理由も1行で言えるようになる✍️💖
  • 「どっちでもあり得る(境界)」を見つけたら、**“判断の追加質問”**まで言えるようになる🙂🧠

2. クイズのやり方(おすすめ)📝🎮

  1. まず答えを見ずに、**E(Entity)/ V(VO)/ B(境界)**で書く✍️
  2. 理由は1行でOK(長文いらない)🙂
  3. 答え合わせで「自分のズレの癖」を知る👀✨

3. 分類クイズ15問🎯🔥

E=Entity / V=Value Object / B=境界(設計次第)

Q1:Money(例:¥450)💰

  • これは? E / V / B

Q2:Quantity(例:2杯)☕️➕

  • これは? E / V / B

Q3:Email(例:a@b.com)📧

  • これは? E / V / B

Q4:Order(注文そのもの)🧾

  • これは? E / V / B

Q5:OrderId(注文ID)🆔

  • これは? E / V / B

Q6:OrderLine(注文明細:ラテ×2 みたいな1行)📄

  • これは? E / V / B

Q7:MenuItem(メニュー:カフェラテ)📋☕️

  • これは? E / V / B

Q8:MenuItemCode(メニューコード:LATTE-001 みたいな)🏷️

  • これは? E / V / B

Q9:CouponCode(クーポン文字列:WELCOME10)🎫

  • これは? E / V / B

Q10:Coupon(“クーポンの利用状態”を持つもの:未使用/使用済/期限切れ)⏳🎫

  • これは? E / V / B

Q11:Student(学生ユーザー)👩‍🎓

  • これは? E / V / B

Q12:StudentId(学籍番号)🪪

  • これは? E / V / B

Q13:Address(住所)🏠

  • これは? E / V / B

Q14:PaymentMethod(支払い方法:現金/クレカ/電子マネー)💳

  • これは? E / V / B

Q15:ReceiptNumber(領収書番号)🧾🔢

  • これは? E / V / B

4. 答え合わせ(理由1行つき)✅✨

ここから下、答えだよ〜!👀💖

A1:Money → V 💎

値が同じなら同じ、不変で扱いたい(通貨や丸めルールも一緒に持てる)

A2:Quantity → V 💎

「2」は「2」。値の塊。**制約(1以上など)**を一緒に守る

A3:Email → V 💎

同じ文字列なら同じ。形式チェック込みで**“作れたら正しい”**にしたい

A4:Order → E 🆔

途中で状態が変わっても“同じ注文”。履歴・状態(Draft/Confirmed…)が大事

A5:OrderId → V(またはVO的な専用型)🆔💎

IDそのものは値。取り違え防止のために型にするのが強い

A6:OrderLine → **B(境界)**🙂

  • VO寄り:明細を“丸ごと差し替え”で運用する(不変で扱う)
  • Entity寄り:明細に行IDがあり、行単位で履歴や編集を追いたい 👉「明細を個別追跡する要件がある?」が追加質問✅

A7:MenuItem → **E(寄り)**🆔

メニューはカタログの“本人”。価格改定しても“同じ商品”として扱うことが多い

A8:MenuItemCode → V 🏷️💎

コードは値。コードの形式制約(長さ/文字種)も一緒にできる

A9:CouponCode → V 🎫💎

文字列そのものは値。コードのバリデーションも含めやすい

A10:Coupon → E(寄り) 🎫🆔

「未使用→使用済」みたいに状態が変わる同一物として追うことが多い (※“ただの割引ルール”ならVO/ルール扱いもあり得るけど、利用履歴を持った瞬間Entity寄り)

A11:Student → E 👩‍🎓🆔

学生は“本人”。名前が変わっても同一人物だよね

A12:StudentId → V 🪪💎

学籍番号は値。学生(Entity)を識別するための値(型付きにすると事故が減る)

A13:Address → **B(境界)**🏠🙂

  • VO寄り:住所は値の塊。変更は“新住所に差し替え”
  • Entity寄り:住所自体にIDを付けて履歴・検証・参照を強く追う(配送先台帳など) 👉「住所を“履歴対象の資産”として管理する?」が追加質問✅

A14:PaymentMethod → V 💳💎

列挙や小さな値の組で表せることが多い(“支払い手段”は値として比較できる)

A15:ReceiptNumber → **B(境界)**🧾🙂

  • VO寄り:番号は値(形式・桁数を守る)
  • Entity寄り:領収書そのもの(再発行/取消/監査)を追うならEntity 👉「番号だけ必要?それとも領収書という“物”を追う?」が追加質問✅

5. “境界”を見つけた時の最強ムーブ💪✨

境界に出会ったら、焦って分類しないでOK🙂 代わりにこの2つを書くのが勝ち✍️💖

  • 追加質問(要件):「これ、個別に追跡する?履歴いる?」🕵️‍♀️
  • 運用方針:「不変で差し替える?それとも更新で持つ?」🔁

これができると、設計の会話が一気にプロっぽくなるよ😆✨


6. 10分ミニ演習:自分の“判断癖”を矯正する🧪🧠

演習A(3分)📝

上の15問で、B(境界)にしたものを全部書き出して、 「追加質問」を1個ずつ付けてみて✨

例:Address → 「配送先を履歴管理する必要ある?」✅

演習B(7分)🧪

OrderLineを「VO案」と「Entity案」で、1行ずつメリットを書く👇

  • VO案:差し替え運用でシンプル、バグ少ない💎
  • Entity案:行単位の編集履歴が追える🆔

7. AI(Copilot/Codex)に頼むときの“良い頼み方”🤖💬✨

Visual Studio の Copilot Chat はメニューから開けるよ🪟✨ (Microsoft Learn)

そのまま使えるプロンプト例(コピペOK)🧁

次の15項目を Entity / ValueObject / 境界(B) で分類して。
各項目の理由は「1行」で。
境界(B)にした場合は「追加質問(要件)」も1つ付けて。

(ここにQ1〜Q15を貼る)

AIの答えを“採点”する観点✅

  • 「IDで追跡するか?」の視点がある?🆔
  • 「値が同じなら同じか?」がある?💎
  • 「境界のとき追加質問が書けてる?」🙂

8. 今日のまとめ(1分)⏱️✨

  • Entity:同一性(ID)で追う、状態や履歴が大事🆔
  • VO:値で比較、不変、作れた時点で正しい💎🔒
  • 境界:要件で変わる。追加質問を書けたら勝ち🙂✅

そして今の開発環境は、**.NET 10(LTS)**が最新ラインで、2026/1/13時点の最新パッチは 10.0.2だよ〜✨ (Microsoft) (C# 14 は .NET 10 対応で最新)(Microsoft Learn) (Visual Studio 2026 は 2026/1/20 に 18.2.1 の更新が出てる)(Microsoft Learn)


次章予告📣✨(第23章)

次は DTO/API/画面入力 → ドメイン変換🌉🧾 “string/int地獄😇”から VOで救出する流れを作っていくよ〜!💎🚀