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

エンティティ/値オブジェクトの切り分け 24章:詳細アウトライン 📘✨

(Windows+VS Code前提/CopilotやCodex系AI拡張導入済み前提👍)


全体構成(24章)🌈

  • Part 1(1〜6章):概念の土台づくり(Entity/VOの芯)🧠✨
  • Part 2(7〜11章):Value Objectを作って感覚を固める💎🧱
  • Part 3(12〜17章):Entity・境界・エラー・状態遷移まで入門🪪🚪⚠️
  • Part 4(18〜24章):永続化/変換/ACL/テスト/総合演習で実務形へ🚀🧪

Part 1:概念の土台づくり(1〜6章)🧠✨

第1章:はじめに(この学習のゴール)🎯😊

  • ねらい:EntityとVOを「迷ったときに判断できる」状態にする✨

  • 学ぶこと:同一性/値/不変/責務の分離(超やさしく)🙂

  • やること:題材(ミニ注文 or サークル会計)を選ぶ🛒📒

  • 成果物:学習ゴールメモ(判断軸を3つ書く)📝

  • AIプロンプト例🤖:

    • 「初心者向けに“EntityとVOの違い”を、例3つで説明して」

第2章:Windows+VS Code+TypeScript環境づくり💻🪟

  • ねらい:学習で詰まらない“最低限の開発セット”を作る🛠️

  • 学ぶこと:TSプロジェクト、Lint/Format、テストの導入感覚🧩

  • やること:VS Code拡張・AI拡張の基本設定(使いすぎ注意も)🤖⚠️

  • 成果物:空プロジェクト+テストが動く状態✅

  • AIプロンプト例🤖:

    • 「TypeScript学習用の最小構成フォルダ案を出して。テストも入れて」

第3章:題材の“業務ルール”を決めよう(超ミニ仕様)🧾✨

  • ねらい:設計は“ルール”がないと始まらないのを体験🙂

  • 学ぶこと:名詞(もの)と動詞(操作)を分けて考える🧠

  • やること:仕様を10行くらいで書く(箇条書きでOK)📝

  • 成果物:ミニ仕様+用語リスト(ユビキタス言語ごっこ)📘

  • AIプロンプト例🤖:

    • 「この仕様から“名詞候補”と“ルール候補”を抜き出して」

第4章:Entity/VOを分ける前に…「同一性」ってなに?🪪🧸

  • ねらい:Entityの芯=同一性(時間をまたいで同じ)を理解⏳

  • 学ぶこと:IDは手段/本質は“追跡が必要か”🔍

  • やること:題材から「追跡したいもの」を3つ挙げる📝

  • 成果物:Entity候補リスト(理由つき)✅

  • AIプロンプト例🤖:

    • 「この候補がEntityっぽい理由を“同一性”の観点で説明して」

第5章:Value Objectの芯=不変+自己検証+値の等価性💎✅

  • ねらい:VOの“気持ちよさ”を先に味わう🍰

  • 学ぶこと:不変(Immutable)/不変条件(Invariants)/等価性🔒

  • やること:題材から「値そのもの」候補を5つ挙げる💡

  • 成果物:VO候補リスト(守りたいルールつき)🛡️

  • AIプロンプト例🤖:

    • 「このVOに必要な“不変条件”を、初心者向けに箇条書きで」

第6章:Entityの芯=更新の入口を絞って“壊れない”設計🧱🪪

  • ねらい:Entityは変わる。でも壊れない。ここが設計ポイント🙂

  • 学ぶこと:直接書き換え禁止/メソッドで更新/ルールは中へ🚧

  • やること:題材の「更新イベント」を3つ書く(例:支払う、取消す)📝

  • 成果物:Entityが守るルール一覧(やっていい/だめ)🚦

  • AIプロンプト例🤖:

    • 「このEntityの“やってはいけない状態”を想像して例を出して」

Part 2:Value Objectを作って感覚を固める(7〜11章)💎🧱

第7章:迷わないための“判定フロー”を作る🗺️✨

  • ねらい:判断がブレない“質問リスト”を持つ🙂

  • 学ぶこと:①追跡?②不変が自然?③置き換え?の3点セット🧠

  • やること:判定フローを自分の言葉で作る📝

  • 成果物:判定チートシート(1枚)📄

  • AIプロンプト例🤖:

    • 「この判定フローに抜けがないかレビューして。改善案も出して」

第8章:VO実装①「Email」や「PostalCode」みたいな“形式の値”📧📮

  • ねらい:VOの基本形(生成時チェック)を作れるようにする✅

  • 学ぶこと:生成時バリデーション/無効値を作らない🚫

  • やること:Email VOを作り、成功/失敗をテストする🧪

  • 成果物:Email VO+テスト✅

  • AIプロンプト例🤖:

    • 「Emailの境界値テスト(OK/NG例)を20個出して」

第9章:VO実装②「Money」みたいな“計算する値”💰➕

  • ねらい:VOに“ふるまい(メソッド)”を持たせる感覚を掴む🙂

  • 学ぶこと:加算/減算/通貨/丸め、ルールをVO側で守る🛡️

  • やること:Moneyの add() / multiply() などを作る🧩

  • 成果物:Money VO+計算テスト🧪

  • AIプロンプト例🤖:

    • 「Moneyの設計で初心者がやりがちなバグ例を出して、回避策も教えて」

第10章:VO実装③「Period」みたいな“範囲の値”📅↔️

  • ねらい:開始/終了の整合性を“型で守る”体験✨

  • 学ぶこと:start <= end、空範囲OK?などの判断🧠

  • やること:Period VO+contains() などのメソッド🧩

  • 成果物:Period VO+境界テスト🧪

  • AIプロンプト例🤖:

    • 「期間のルール候補(業務でありがち)を10個出して」

第11章:VOの“等価性”と“コレクション”設計(Set/List)🧺💎

  • ねらい:VOが増えたときに破綻しない扱い方を知る🙂

  • 学ぶこと:値の比較/重複禁止/順序が意味を持つか🔍

  • やること:Tagの集合、LineItemの一覧…を整理してみる🧩

  • 成果物:VO集合のルール(重複/順序/最大数)📋

  • AIプロンプト例🤖:

    • 「このコレクションはSet向き?List向き?理由も説明して」

Part 3:Entity・境界・エラー・状態遷移(12〜17章)🪪🚪⚠️

第12章:Entity実装①「基本のEntity骨格」を作る🪪🧱

  • ねらい:ID/生成/更新の入口を作れるようにする🙂

  • 学ぶこと:コンストラクタをむやみに公開しない考え方🚪

  • やること:Member or Order のEntityを作る(最小)🧩

  • 成果物:Entity+生成テスト🧪

  • AIプロンプト例🤖:

    • 「Entityの責務が増えすぎないための分割案を提案して」

第13章:Entity実装②「VOを持たせる」+“更新は差し替え”🔁💎

  • ねらい:Entity × VO の組み合わせが自然にできる✨

  • 学ぶこと:住所変更=Address VOを新しく作って差し替える🙂

  • やること:Entityに Email/Money/Period を組み込む🧩

  • 成果物:EntityがVOを使う形+更新テスト🧪

  • AIプロンプト例🤖:

    • 「VOを差し替える更新設計になってるかチェックして」

第14章:Aggregateの入口(更新ルートを1つに絞る)🚪👑

  • ねらい:“誰が誰を更新していいか”で事故を減らす🚑

  • 学ぶこと:集約ルート経由でのみ更新(DDDの入口)📦

  • やること:Order→LineItemsの更新を「Orderメソッド経由」にする🧩

  • 成果物:更新経路が整理されたモデル✅

  • AIプロンプト例🤖:

    • 「このモデルの“直接触っちゃダメなところ”を指摘して理由も言って」

第15章:不変条件を“入口”で守る(作れない状態を作らない)🛡️🚪

  • ねらい:チェックが散らばるのを止める🙂

  • 学ぶこと:生成/更新メソッドで保証、内部は前提を信頼✅

  • やること:無効状態が作れないようにコードを整える🔧

  • 成果物:不変条件チェックが一箇所に集まった設計✨

  • AIプロンプト例🤖:

    • 「この不変条件、どこで守るのが一番安全?理由も」

第16章:状態遷移(超入門のState Machine)🚦🔄

  • ねらい:Entityの“状態”を整理するとバグが減るのを体験🙂

  • 学ぶこと:状態・遷移・ガード条件(許可/禁止)🚫✅

  • やること:OrderStatus(Draft→Submitted→Paid→Cancelled)を設計📋

  • 成果物:遷移表+遷移テスト🧪

  • AIプロンプト例🤖:

    • 「この状態遷移で抜けてそうなケースを5つ出して」

第17章:境界(DTO→ドメイン)とエラーの基本(Result/例外)🚪⚠️

  • ねらい:外から来たデータを“安全に”中へ入れる🙂

  • 学ぶこと:入力DTO変換/ドメインエラーとシステムエラーの分離🧯

  • やること:CreateOrderRequest DTO → Order に変換、失敗を表現🧩

  • 成果物:境界変換+エラー表現の雛形✅

  • AIプロンプト例🤖:

    • 「この失敗はユーザー入力?システム障害?分類して理由も」

Part 4:永続化/変換/ACL/テスト/総合演習(18〜24章)🚀🧪

第18章:永続化とドメインは別物(分離の考え方)💾🧼

  • ねらい:DB都合でモデルが歪むのを防ぐ🙂

  • 学ぶこと:SoC(関心の分離)・依存の向きの感覚🧠

  • やること:DBっぽい形(Record)とドメイン型の違いを整理📋

  • 成果物:ドメインはドメインの形でOK、という設計方針メモ📝

  • AIプロンプト例🤖:

    • 「このDB設計から“ドメインに持ち込みたくない要素”を指摘して」

第19章:Repositoryの入口(interfaceで守る:DIP入門)🧩🧱

  • ねらい:ドメインがDBに依存しない形を作る✨

  • 学ぶこと:Repositoryは“約束(抽象)”、実装は外側へ🔁

  • やること:Repositoryのメソッド設計(save/find)を決める📝

  • 成果物:Repository interface案✅

  • AIプロンプト例🤖:

    • 「このRepository、やりすぎ?責務が重い?改善案も」

第20章:Mapper(変換)入門:Domain ↔ Persistence🔁💾

  • ねらい:変換は“地味だけど超重要”を体験🙂

  • 学ぶこと:DTO/Recordとドメインの変換責務を固定する🧩

  • やること:toRecord/fromRecord を作ってテスト🧪

  • 成果物:Mapper+変換テスト✅

  • AIプロンプト例🤖:

    • 「変換で起きやすいバグ(null/単位/丸め)を列挙して」

第21章:ACL(外部APIの歪みを入れない翻訳層)🌉🧼

  • ねらい:外部都合を“中に入れない”防波堤を作る🙂

  • 学ぶこと:外部DTOの命名/単位/欠損値を吸収する考え方🧯

  • やること:外部レスポンス→ドメイン型へ翻訳するAdapterを作る🧩

  • 成果物:ACL(翻訳)クラスの雛形✅

  • AIプロンプト例🤖:

    • 「この外部データの“危険ポイント”を指摘して、吸収方法を提案して」

第22章:テスト戦略(VO・Entity・境界・変換)🧪🍰

  • ねらい:1人開発でも壊れない“守り”を作る🙂

  • 学ぶこと:VOは単体テストが最強/Entityはルールテスト中心✅

  • やること:テストの粒度を4段に分けて整える📋

  • 成果物:テスト方針+最低限のテストセット✅

  • AIプロンプト例🤖:

    • 「この機能のテスト、足りない観点をチェックして追加案を出して」

第23章:リファクタ演習(Entity→VO化でバグを減らす)🔧✨

  • ねらい:既存コードを“安全に改善する手順”を身につける🙂

  • 学ぶこと:小さく直す/テストを盾にする/責務を戻す🛡️

  • やること:住所/金額/期間などをVOに分離して置き換える🔁

  • 成果物:VO化されたコード+回帰テスト✅

  • AIプロンプト例🤖:

    • 「このコードをVO化する手順を“3ステップ”で提案して。リスクも」

第24章:総合ミニプロジェクト(統合)+実務チェックリスト🎒🏁✅

  • ねらい:設計→境界→永続化→テストまで“1本”でつなぐ🚀

  • 学ぶこと:依存の向き/境界で守る/変更に強い構造の手触り🙂

  • やること:仕様変更1個を入れて、影響範囲が小さいことを確認🔁

  • 成果物:完成ミニプロジェクト+判断チートシート最終版📄✨

  • AIプロンプト例🤖:

    • 「仕様変更が来た。どこを直す?影響範囲と理由を説明して」

おまけ:この24章で“最終的にできるようになること”🌟😊

  • Entity/VOの判定が理由つきで言える🗣️✨
  • VOで不変条件を守って、バグを型と設計で減らせる🛡️
  • Entityの更新が安全な入口に集まる🚪
  • DTO/DB/外部APIの都合がドメインを汚さない🧼
  • テストがあるから、安心してリファクタできる🧪💪