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

ヘキサゴナル(Ports & Adapters)35章 詳細アウトライン 🔷🔌✨

C#初級〜中級/設計超入門/ヘキサ初めて/Windows/Visual Studio中心(必要ならVS Code)/AI拡張(Copilot/Codex等)前提🤖✨

第1章 設計って何のため?(怖い変更を減らす)😵‍💫➡️😊

  • 変更が怖い理由(影響範囲が読めない)
  • “守りたいもの”=業務ルール(中心)という発想🛡️
  • 今日のゴール:中心を守れる構造を作る💪

第2章 ヘキサゴナルを一言で!🔷✨

  • 「中心(Core)を外側から守る設計」
  • 六角形は図の都合、ポイントは“境界”📌
  • どう嬉しい?:UI/DBを差し替えやすい🔁

第3章 登場人物:Core / Port / Adapter 👥🔌

  • Core:業務ルール&手順(方針)
  • Port:約束(interface)
  • Adapter:変換してつなぐ実装🔌

第4章 よくある失敗:全部ぐちゃぐちゃ構造🍝😭

  • Controllerに業務・DB・変換が混ざる問題
  • 「ちょい修正で全体が壊れる」を体感する例
  • 何を分ける?変更理由ごとに分ける(SoC)✂️

第5章 中心(Core)が主役な理由🏠❤️

  • UIは流行が変わる、DBも変わる
  • “変わりにくいルール”を中心に置く
  • まず守るのはCoreだよ🛡️

第6章 Inboundの考え方(外→中)⬅️🚪

  • 外がCoreを呼ぶ入口(API/画面/CLI)
  • Inboundは「呼び出し」を整える係
  • 入口を薄くするメリット😊

第7章 Outboundの考え方(中→外)➡️🗄️

  • Coreが外部を使う出口(DB/外部API/時計)
  • “使いたいこと”だけCoreに残す
  • 実装は外側に逃がす✨

第8章 Portって何?(約束のinterface)📝🔌

  • Port=「こう呼んでね」「こう提供してね」
  • interfaceの役割:差し替えの接続口
  • “型で約束”すると強い💪

第9章 Adapterって何?(変換係)🔁🔌

  • Adapter=Portを実装して外とつなぐ
  • 変換(DTO↔ドメイン)を押し込む場所
  • 外部の都合をCoreに入れない🧼

第10章 依存の向き①:依存ってそもそも何?🧲🙂

  • using参照/new/呼び出し…どれが依存?
  • 依存が増えると何が困る?
  • 図で理解する(矢印の意味)📈

第11章 依存の向き②:Coreが外を知らない設計🛡️🚫

  • Core→DB参照しちゃダメな理由
  • 「外は差し替え対象」だから
  • “Coreは方針、外は詳細”✨

第12章 依存の向き③:Portで逆転する(DIPの超入門)🔁🧠

  • 具体に依存しない=抽象に依存
  • RepositoryやClientをinterfaceで受ける
  • ここがヘキサの心臓部❤️

第13章 他アーキとの関係①:まずヘキサだけで覚えよう🔷📌

  • 混ぜ物なしで「Port/Adapterだけ」で整理
  • 迷ったら「それPort?Adapter?」で判断😊

第14章 他アーキとの関係②:レイヤード/クリーンとの“似てる所”🤝📚

  • 似てる:中心を守る、境界を作る
  • 違い:ヘキサは“ポート発想”が強い
  • ※ここは復習用でもOK📌

第15章 ミニ題材決定:カフェ注文アプリ☕🧾

  • 要件:注文作成/注文一覧
  • まずはInMemoryで完成→後でDB差し替え🔁
  • これで「強さ」を体験するよ😆

第16章 環境準備(Windows)🪟⚙️

  • Visual Studioでソリューション作成
  • テストプロジェクトも最初から作る🧪
  • (必要なら)VS Code + dotnet CLIも紹介💻

第17章 フォルダ/プロジェクト構成(おすすめ)📦🏷️

  • Core(Domain / Application)
  • Adapters(Inbound / Outbound)
  • 依存方向のルールを先に決める🚦

第18章 Domain入門①:Domainってなに?🏠🌱

  • Domain=業務ルールの“言葉と制約”
  • DBの都合と混ぜない
  • “現実の名前”をコードに置く✨

第19章 Domain入門②:Entity(同一性)👤🪪

  • IDで追う「同じもの」
  • OrderはEntityっぽいよね、みたいな感覚
  • どこで生成する?も軽く触れる

第20章 Domain入門③:ValueObject(値・不変)💎🔒

  • 金額・数量・住所みたいな“値そのもの”
  • 不変にするとバグ減る😊
  • 型にして守る発想(超ライト版)🧠

第21章 UseCase入門:アプリの手順(Application層)🧭🛠️

  • 「注文する」は手順のまとまり
  • UI都合は入れない(画面項目のままにしない)
  • 入力→処理→出力の形を作る📦

第22章 Inbound Port設計①:ユースケースの入口をinterface化🚪📝

  • ICreateOrderUseCaseみたいな形
  • “呼び方”を固定する
  • ここはCore側に置く理由

第23章 Inbound Port設計②:DTO(入力/出力)を作る📦✨

  • Domain型をそのまま外へ出さない
  • 入力DTO/出力DTOの役割
  • 変換はどこ?→Adapter側へ🔁

第24章 Inbound Adapter①:Controllerは薄く!🌐🙂

  • Controllerの責務:受け取ってPort呼ぶだけ
  • 変換・バリデーションの置き場所を整理✅
  • “薄いほど偉い”の感覚😊

第25章 Outbound Port設計①:Repositoryの約束🗄️📝

  • Coreが欲しいのは「保存できること」だけ
  • IOrderRepository の形
  • 具体DBは知らない🚫

第26章 Outbound Adapter①:InMemory実装でまず完成🧪📦

  • まず動くを最優先(KISS)😊
  • 差し替え可能な土台を作る
  • テストもしやすい😆

第27章 Outbound Adapter②:DB実装に差し替え(考え方)🔁🗃️

  • Portはそのまま、Adapterだけ入れ替える
  • “Coreコードが変わらない”を確認🛡️
  • 差し替えの手順のコツ

第28章 Outbound Adapter③:DB実装(最低限の実例)🗃️⚙️

  • ORM/設定は“必要最低限”だけ
  • 変換(DBモデル↔Domain)をAdapterに置く
  • DB都合がCoreに漏れないように🧼

第29章 Outbound Adapter④:外部API/メールも同じ発想📡✉️

  • HttpClientもPort越しに扱う
  • DTO変換・リトライは外側で
  • ここは発展の入口😊

第30章 DI入門①:DIって何?なぜ必要?🧠🔧

  • newしないと何が嬉しい?
  • テスト差し替えができる✨
  • “配線は外で”の考え方🧩

第31章 DI入門②:.NETのDI基本(AddScoped等)🔧🧰

  • どこに登録する?(Program.cs)
  • ライフタイムの超入門(Transient/Scoped/Singleton)🕒
  • 迷ったらどうする?の目安も😊

第32章 Composition Root:配線をここに集める📍🧩

  • “依存の集中管理場所”という意味
  • ここだけは外側の都合がOK🙆‍♀️
  • 実装の差し替えポイントになる🔁

第33章 テスト設計①:Coreの単体テストが簡単になる🧪💖

  • Fake/StubのAdapterを差してテスト
  • DBなしでユースケース検証できる快感😆
  • まずは1本書ければOK!

第34章 テスト設計②:Adapterのテストは別物🔍🧪

  • DB Adapterは統合テスト寄り
  • “CoreとAdapterでテストの目的が違う”を理解🎯
  • どこまでやる?の現実的ライン📌

第35章 仕上げ:エラー・ログ・AI活用の“最低限セット”🎁✨

  • エラー:ドメイン失敗 vs 外部失敗を分ける🧯

  • ログ:重要イベントだけでも残す📝

  • AI:雛形は任せて、境界ルールは人が守る🚦🤖

  • 最終チェックリスト✅

    • Coreが外を参照してない?
    • Port/Adapterが役割通り?
    • InMemory↔DB差し替えできる? 🔁