「合成優先(継承より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は“答えを写す道具”じゃなくて、「案出し」「レビュー」「命名相談」に使うのが相性◎🤖🫶