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

「合成優先(継承よりComposition)」17章・詳細アウトライン📚🧩✨

(対象:C#は初級〜中級/設計は超入門/Compositionは初めて👶➡️🙂)


第1章 この講座のゴールと“合成”のイメージ作り🧠🧩

  • ねらい🎯:まず「合成ってなに?」をふわっと掴む

  • 学ぶこと📌

    • 「継承=血縁」「合成=パーツで組み立て」って感覚👨‍👩‍👧‍👦 vs LEGO🧱
    • 変更が来た時に“壊れにくい”設計ってどんな感じ?🛡️
  • ハンズオン🧪:

    • 小さな題材(例:通知、支払い、割引)で「どこが変わりそう?」をメモ📝
  • AI活用🤖:

    • 「この仕様、将来どこが変更されそう?」ってAIに予想してもらう💬

第2章 超ミニ復習:継承でできること/できないこと

  • ねらい🎯:継承そのものを“悪者”にせず、性質を知る🙂

  • 学ぶこと📌

    • virtual/override/abstract/sealed の役割🔧
    • “親クラスを変えたら子が死ぬ”が起きる理由💥
  • ハンズオン🧪:

    • 親に1行追加→子の挙動が変わる例を体験😱
  • AI活用🤖:

    • 「この継承、変更に弱いポイントを3つ」ってレビューさせる🕵️‍♀️

第3章 継承でハマる典型:派生クラス増殖🌱➡️🌳➡️🌲

  • ねらい🎯:「つらくなるサイン」を早めに見抜けるようにする👀

  • 学ぶこと📌

    • 派生が増えるほど“修正の爆発範囲”が増えがち💣
    • 「例外的な子」が出た瞬間に地獄が始まる👻
  • ハンズオン🧪:

    • “例外的な子”を1つ足して、コードが汚れていくのを観察🧪
  • AI活用🤖:

    • 「このツリー、将来どこで破綻する?」を質問💬

第4章 合成の第一歩:has-a(部品を持つ)🧳✨

  • ねらい🎯:「継承しないで再利用する」感覚を作る🧩

  • 学ぶこと📌

    • フィールドに部品を持つ/委譲する(has-a)
    • 役割(責務)で分けるとスッキリする🧼
  • ハンズオン🧪:

    • 1クラスで全部やってるコードを「2部品」に分割✂️
  • AI活用🤖:

    • 「責務が混ざってる箇所を指摘して」って頼む🔍

第5章 インターフェース入門:差し替えの土台🔌🙂

  • ねらい🎯:「合成=差し替え可能」を実現する準備✨

  • 学ぶこと📌

    • interface を“契約”として使う📜
    • 実装ではなく抽象に依存すると嬉しい理由🧲
  • ハンズオン🧪:

    • interface + 実装2種類を作って切替🔁
  • AI活用🤖:

    • 「interface名とメソッド名、もっと分かりやすく」命名相談📝

第6章 委譲(Delegation):自分でやらずに頼る💁‍♀️📦

  • ねらい🎯:「薄いクラス」「丸投げ設計」に慣れる

  • 学ぶこと📌

    • ラッパー(Wrapper)で包んで委譲する📦➡️📦
    • 変更点を“1か所”に寄せるコツ🎯
  • ハンズオン🧪:

    • 既存クラスを包んでログだけ足す(超ミニ版)📝
  • AI活用🤖:

    • 「委譲版にリライト案出して」→比較して理解👀

第7章 合成の“組み立て場所”:Composition Root🌳🧩

  • ねらい🎯:「どこでnewするの?」問題を解決する✨

  • 学ぶこと📌

    • 依存の組み立てを1か所に集める考え方🧺
    • アプリ起動地点(Program等)から組む感覚🚀
  • ハンズオン🧪:

    • 手動で部品を組み立てて注入🎁
  • AI活用🤖:

    • 「この依存グラフ、組み立て順を提案して」🧠

第8章 DI(依存性注入)入門:コンストラクタ注入🎁🔌

  • ねらい🎯:合成を“普段使い”できる形にする😊

  • 学ぶこと📌

    • new しないで外から渡す(コンストラクタ注入)
    • 何を注入すべき?(変わりやすいもの優先)🌪️
  • ハンズオン🧪:

    • 「時計」「乱数」「外部I/O」を差し替え可能にする⌚🎲
  • AI活用🤖:

    • 「newを消して注入に直して」リファクタ提案🔧

第9章 (軽め)DIコンテナは“便利な自動組み立て機”🤖🧰

  • ねらい🎯:コンテナは“怖くない”で止める(深入りしない)🙂

  • 学ぶこと📌

    • できること:登録→解決(自動new)
    • やりすぎ注意:魔法にしない🪄❌
  • ハンズオン🧪:

    • 1〜2種類だけ登録して動かす(最小)🧪
  • AI活用🤖:

    • 「登録設計、過剰になってない?」チェック✅

第10章 Strategy:ふるまいを部品化して差し替え🎭🔁

  • ねらい🎯:合成の王道「ロジック差し替え」を体験✨

  • 学ぶこと📌

    • 条件分岐を“戦略クラス”に逃がす🏃‍♀️
    • ルールが増えても破綻しにくい📈
  • ハンズオン🧪:

    • 割引・手数料・通知ルールを Strategy 化🛒
  • AI活用🤖:

    • 「Strategy候補を列挙して、責務分割案を」🧠

第11章 State(状態)と合成:if地獄を減らす🚦🙂

  • ねらい🎯:「状態が増えるとつらい」を合成で解決する入口

  • 学ぶこと📌

    • 状態ごとの処理を“状態オブジェクト”に分ける🚦
    • 禁止遷移をコードで守る🛑
  • ハンズオン🧪:

    • 注文ステータス(下書き→確定→発送…)を状態クラスに分離📦
  • AI活用🤖:

    • 「状態遷移表を作って」→それを元に実装する🗺️

第12章 Decorator:機能を“重ねる”合成テク🎂✨

  • ねらい🎯:継承なしで機能追加(ログ、リトライ等)🍰

  • 学ぶこと📌

    • 元を触らず外側で包む
    • 横断関心(ログ等)を分離できる🧼
  • ハンズオン🧪:

    • ログDecorator→リトライDecorator(2段重ね)🧁🧁
  • AI活用🤖:

    • 「Decorator雛形を出して」→自分で役割確認しながら修正✍️

第13章 Adapter:外部の都合を中に入れない🔧🧼

  • ねらい🎯:外部APIのクセを“翻訳して隔離”する

  • 学ぶこと📌

    • 外部DTO/例外/命名を、自分の世界の型へ変換🔄
    • 依存方向を守る(中心を守る)🛡️
  • ハンズオン🧪:

    • “外部っぽいクラス”を自分用interfaceで包む📦
  • AI活用🤖:

    • 「このAPI、うちのドメイン用に薄く包む案」💬

第14章 Facade:利用側をラクにする窓口🪟😊

  • ねらい🎯:複数部品の使い方を“簡単にまとめる”

  • 学ぶこと📌

    • 「呼び出し順」「面倒な設定」を隠す
    • ただし“何でもFacade”にしない注意⚠️
  • ハンズオン🧪:

    • 3ステップ処理を Facade で1メソッドにまとめる🧵
  • AI活用🤖:

    • 「Facade化した場合の公開API案」📝

第15章 合成のご褒美🍬:テストがラクになる✅⚡

  • ねらい🎯:「差し替え=テスト容易」を体験して嬉しくなる回😊

  • 学ぶこと📌

    • Fake/Stubで依存を置き換える🧸
    • 何をテストし、何をモックしないかの感覚🤏
  • ハンズオン🧪:

    • 外部I/OをFakeにしてロジックを高速テスト⚡
  • AI活用🤖:

    • 「テストケース案を10個」→良いのだけ採用🧪🤖

第16章 リファクタ手順:継承→合成へ安全に移行する🛠️🙂

  • ねらい🎯:既存コードを“壊さず”合成に寄せるやり方を覚える

  • 学ぶこと📌

    • 小さく分ける順番(テスト→抽出→委譲→差し替え)🪜
    • いきなり全部やらない(最小1点突破)🎯
  • ハンズオン🧪:

    • “危ない継承”を1か所だけ Strategy/Decorator どちらかに置換🔁
  • AI活用🤖:

    • 「このコード、最小の安全な分割ステップを提案して」🧠

第17章 判断力まとめ:いつ合成?いつ継承?チェックリスト🎯🌈

  • ねらい🎯:現場で迷ったときの“判断メモ”を持ち帰る👜✨

  • 学ぶこと📌(軽めに!)

    • 合成が向くサイン✅:差し替えたい/機能を重ねたい/変更が頻繁
    • 継承が向くサイン✅:安定したis-a/共通基盤が明確/派生が増えない見込み
    • “継承OK”でも、まずは合成案を1回考える癖🧩🙂
  • 仕上げ(宿題でもOK)📮:

    • 自分の過去コードを1つ選び、「合成でラクになる所」を1点だけ改善🔧
  • AI活用🤖:

    • 「合成に寄せるなら、最初に触るべき1点は?」って聞く💬

ちょこっと補足(学習の進め方)🌸

  • 1章ごとに「ミニ成果物(小さなクラス構成)」が残るようにしてあるよ📦✨
  • AIは“答えを写す道具”じゃなくて、「案出し」「レビュー」「命名相談」に使うのが相性◎🤖🫶