全体の章立て:高凝集・低結合(C#超入門)17章アウトライン📚✨
第1章:AI支援の使い方(この教材の共通ルール)🤖✨
-
ねらい🎯:AIを“便利に使って、振り回されない”状態になる
-
主な内容📚
- AIは「案出し」が得意💡(分割案、命名案、テスト観点)
- 最終判断は人間🧠✅(責務混在🍲/依存増えすぎ🔗をチェック)
- 1章につきプロンプトは1〜2個まで🎀(情報過多防止)
-
ハンズオン🛠️
- 同じコードに対して「AIの案」を1回だけ出させ、採用/不採用の理由を書く📝
-
AIプロンプト🤖
- 「このコードの責務を3つに分ける案を、クラス名付きで提案して」
- 「その案は責務の混在や依存増加がない?危ない点を3つ指摘して」
第2章:まず“変更が怖い”を体験する😱➡️😄
-
ねらい🎯:高凝集・低結合が必要な理由を体感する
-
主な内容📚
- 変更が波及するコードの典型例💥
- 「直したら別の場所が壊れる」原因の正体👀
-
ハンズオン🛠️
- 1ファイルに詰め込んだサンプルを変更してみて、壊れた箇所を記録📒
-
AIプロンプト🤖
- 「このコードで“変更が怖いポイント”を5つ、理由つきで指摘して」
第3章:用語をやさしく理解(凝集/結合)📚✨
-
ねらい🎯:「良い/悪い」を説明できるようになる
-
主な内容📚
- 高凝集=同じ目的でまとまってる🎯
- 低結合=必要以上に他へ依存しない🔗
- “結合ゼロ”が正義ではない🙅♀️(適量がある)
-
ハンズオン🛠️
- いくつかのクラス例を見て「凝集/結合」を感覚で判定するクイズ🧩
-
AIプロンプト🤖
- 「このクラスの責務を一文で説明して(短く!)」
第4章:設計の判断軸は「変更理由」🧠✨
-
ねらい🎯:分け方の基準を覚える(“好み”で分けない)
-
主な内容📚
- 変更理由が同じものをまとめる🧲
- UI/業務ロジック/外部I/O(DB・API・ファイル)を混ぜない🚪
-
ハンズオン🛠️
- サンプル要件から「変わりそうな点」を3つ書き出し→境界を引く🗺️
-
AIプロンプト🤖
- 「この機能の“変更理由”を想定して5つ挙げて(UI/業務/I/Oで分類)」
第5章:ニオイ図鑑① God Class(何でも屋)🧟♀️💦
-
ねらい🎯:巨大クラスを見抜けるようになる
-
主な内容📚
- God Classの症状(メソッド多すぎ・関心ごと混在)😵
- 分割の第一歩:責務ラベル🏷️
-
ハンズオン🛠️
- 1クラスを「責務ラベル」で色分けして、分割候補を作る🎨
-
AIプロンプト🤖
- 「このクラスを責務ごとにグルーピングして、分割後のクラス名案も出して」
第6章:ニオイ図鑑② 混ぜるな危険(UI・業務・DB)🍲💥
-
ねらい🎯:「混在」が何を壊すか理解する
-
主な内容📚
- UI変更で業務が壊れる/DB変更で画面が壊れる…の地獄😱
- “境界”を作ると安心になる😌
-
ハンズオン🛠️
- UI/業務/DBの処理を3つの箱に仕分けする📦📦📦
-
AIプロンプト🤖
- 「このコードを UI / 業務 / I/O に分類して、混ざってる箇所を指摘して」
第7章:高凝集①「責務で切る」✂️🎯
-
ねらい🎯:クラスを“役割”で分けられるようになる
-
主な内容📚
- 1クラス1テーマ(ただし細かすぎ注意)⚖️
- 「誰の責任?」で迷った時の考え方🧠
-
ハンズオン🛠️
- 大きめクラスを2〜3クラスに分割し、公開メソッドを最小にする🔒
-
AIプロンプト🤖
- 「分割後のクラスの責務をそれぞれ一文で説明して」
第8章:高凝集②「データと振る舞いを近づける」🏠✨
-
ねらい🎯:バグが入りにくい“まとまり”を作れるようになる
-
主な内容📚
- “データだけのクラス”が増える問題📦
- ルール(計算・検証)をデータの近くへ寄せる🧷
-
ハンズオン🛠️
- 金額・割引・期限などのルールを、適切なクラスへ移す💰⏳
-
AIプロンプト🤖
- 「この検証ロジックはどこに置くのが自然?理由つきで候補を3つ」
第9章:高凝集③「命名で設計する」🏷️💖
-
ねらい🎯:名前で責務をハッキリさせる
-
主な内容📚
- Manager/Utilが増えたら黄色信号🚦
- メソッド名は“意図”を表す(何を保証する?)🗣️
-
ハンズオン🛠️
- いまいちな名前をリネームして、責務が透ける状態にする✨
-
AIプロンプト🤖
- 「このクラス/メソッドの命名案を10個。責務が伝わる順に並べて」
第10章:低結合の入口「依存」を見える化👀🔗
-
ねらい🎯:どこが密着してるか把握できる
-
主な内容📚
- new / static / 具体クラス参照=依存が強くなりやすい📌
- 依存の矢印を書くだけで危険箇所が見える🕸️
-
ハンズオン🛠️
- 依存関係図(簡易でOK)を描いて、変更が波及しそうな線を探す🖊️
-
AIプロンプト🤖
- 「このコードの依存関係を文章で説明して(どこが変更に弱い?)」
第11章:低結合① まずは「引数で渡す」🎁✨
-
ねらい🎯:“中で作らない”感覚を身につける
-
主な内容📚
- 依存を外から渡す(メソッド引数/コンストラクタ引数)📦
- 小さな一歩で結合が下がる😌
-
ハンズオン🛠️
- newしている箇所を外に出して、引数で受け取るように変更する🔁
-
AIプロンプト🤖
- 「この new を外に出すなら、引数に何を渡す設計が良い?」
第12章:低結合② interfaceで差し替え(超入門)🔌✨
-
ねらい🎯:「交換できるって気持ちいい!」を体験する
-
主な内容📚
- interface=契約(約束)📜
- Clock/Logger/Repositoryみたいな“外側”が第一対象⏰🪵💾
-
ハンズオン🛠️
- IClock(現在時刻)を差し替えて、テストしやすくする⏰➡️🧪
-
AIプロンプト🤖
- 「この依存を interface 化するとしたら、最小限のメソッドは何?」
第13章:低結合③ DI(依存性注入)※コンテナ無し💉✨
-
ねらい🎯:DIの本質(差し替え)を理解する
-
主な内容📚
- コンストラクタ注入が基本👶
- “組み立て場所”を作る(超やさしいComposition Root)🏗️
-
ハンズオン🛠️
- Program側で依存を組み立てて渡すだけのDIを完成させる✅
-
AIプロンプト🤖
- 「この構成で“組み立て役”はどこに置くのが自然?理由も」
第14章:結合の種類① フラグ引数をやめる🚩💦
-
ねらい🎯:制御結合(分岐だらけ)を減らせる
-
主な内容📚
- bool引数で挙動が変わる=責務が混ざりやすい🍲
- 解決:メソッド分割/方針(Strategyっぽく)🧩
-
ハンズオン🛠️
- フラグ引数を「別メソッド」または「方針オブジェクト」に置き換える🔁
-
AIプロンプト🤖
- 「このフラグ分岐を分割する案を3つ(メリデメつき)」
第15章:結合の種類② static依存(便利だけど代償)⚡💣
-
ねらい🎯:staticの“効きすぎ”をコントロールできる
-
主な内容📚
- staticは差し替えが苦手=テストと変更に弱い🧪💦
- 解決:ラッパー化→interface化(必要な時だけ)🔌
-
ハンズオン🛠️
- static呼び出しをラッパークラスに移し、差し替え可能にする🔁
-
AIプロンプト🤖
- 「この static 依存を弱める最小変更案を出して(段階的に)」
第16章:モジュール境界(迷子防止の構造づくり)📁🧭🔒
-
ねらい🎯:プロジェクトが大きくなっても崩れない土台を作る
-
主な内容📚
- まずはフォルダ分け+配置ルール(小さく始める)📏
- 公開面を絞る(public/internalの考え方を超入門で)🔒
- UI/業務/I/Oの置き場所を固定する📦
-
ハンズオン🛠️
- サンプルを「UI」「Application」「Domain」「Infrastructure」に仕分け(超ざっくりでOK)🗂️
-
AIプロンプト🤖
- 「この機能を4つの箱(UI/App/Domain/Infra)にどう仕分ける?理由も」
了解〜😊🎀 じゃあ 第16章=構造づくり(迷子防止の土台)、第17章=総まとめミニプロジェクト に分けた、**ちゃんとした全体章立て(17章)**を出すね✨ (Windows+Visual Studio前提🪟🛠️/必要ならVS Code補足OK/AI支援前提🤖)
全体の章立て:高凝集・低結合(C#超入門)17章アウトライン📚✨
第1章:AI支援の使い方(この教材の共通ルール)🤖✨
-
ねらい🎯:AIを“便利に使って、混乱しない”状態になる
-
主な内容📚:案出しはAI💡/最終判断は人間🧠✅(責務混在🍲・依存増加🔗をチェック)/1章1〜2プロンプト🎀
-
ハンズオン🛠️:AI案を採用/不採用に分けて理由を書く📝
-
AIプロンプト🤖
- 「責務を3つに分ける案をクラス名つきで」
- 「その案は責務混在/依存増になってない?危険点3つ」
第2章:まず“変更が怖い”を体験する😱➡️😄
-
ねらい🎯:なぜ高凝集・低結合が必要か体感する
-
主な内容📚:変更が波及する典型例💥/壊れ方のパターン
-
ハンズオン🛠️:小変更でどこが壊れるか記録する📒
-
AIプロンプト🤖
- 「変更が怖いポイントを5つ、理由つきで指摘して」
第3章:用語をやさしく理解(凝集/結合)📚✨
-
ねらい🎯:「良い/悪い」を言葉にできる
-
主な内容📚:高凝集=目的でまとまる🎯/低結合=依存が必要最小🔗/結合ゼロは目標じゃない🙅♀️
-
ハンズオン🛠️:短いコード例で“凝集/結合”判定クイズ🧩
-
AIプロンプト🤖
- 「このクラスの責務を一文で説明して(短く)」
第4章:設計の判断軸は「変更理由」🧠✨
-
ねらい🎯:分け方の基準を覚える(好みで分けない)
-
主な内容📚:変更理由が同じものをまとめる🧲/UI・業務・外部I/Oを混ぜない🚪
-
ハンズオン🛠️:要件から「変わりそうな点」→境界線を引く🗺️
-
AIプロンプト🤖
- 「この機能の変更理由を5つ挙げて(UI/業務/I/Oで分類)」
第5章:ニオイ図鑑① God Class(何でも屋)🧟♀️💦
-
ねらい🎯:巨大クラスを見抜いて分割の入口に立つ
-
主な内容📚:症状の見分け方👀/責務ラベルで分解🏷️
-
ハンズオン🛠️:色分け→分割候補クラスを作る🎨
-
AIプロンプト🤖
- 「責務でグルーピングして、分割後のクラス名案も出して」
第6章:ニオイ図鑑② 混ぜるな危険(UI・業務・DB)🍲💥
-
ねらい🎯:混在が“変更の地獄”を生む理由を理解
-
主な内容📚:UI変更で業務が壊れる/DB変更で画面が壊れる😱
-
ハンズオン🛠️:UI/業務/I/Oを3箱に仕分け📦📦📦
-
AIプロンプト🤖
- 「このコードをUI/業務/I/Oに分類して、混在箇所を指摘して」
第7章:高凝集①「責務で切る」✂️🎯
-
ねらい🎯:クラスを“役割”で分けられるようになる
-
主な内容📚:1クラス1テーマ(細かすぎ注意⚖️)/公開メソッドを絞る🔒
-
ハンズオン🛠️:大きいクラスを2〜3クラスへ分割する🧩
-
AIプロンプト🤖
- 「分割後クラスの責務をそれぞれ一文で説明して」
第8章:高凝集②「データと振る舞いを近づける」🏠✨
-
ねらい🎯:ルールの置き場所で迷わなくなる
-
主な内容📚:データだけクラス問題📦/検証・計算を近くへ🧷
-
ハンズオン🛠️:金額/期限などのルールを適切な場所へ移す💰⏳
-
AIプロンプト🤖
- 「この検証ロジックの置き場所候補を3つ、理由つきで」
第9章:高凝集③「命名で設計する」🏷️💖
-
ねらい🎯:名前で責務を“見える化”する
-
主な内容📚:Manager/Util増殖の危険🚦/意図が伝わる名前🗣️
-
ハンズオン🛠️:リネームで責務が透ける状態へ✨
-
AIプロンプト🤖
- 「命名案を10個。責務が伝わる順に並べて」
第10章:低結合の入口「依存」を見える化👀🔗
-
ねらい🎯:密着ポイントを把握する
-
主な内容📚:new/static/具体参照が強結合になりやすい📌/依存の矢印🕸️
-
ハンズオン🛠️:簡易依存図を書いて“危険な線”を探す✍️
-
AIプロンプト🤖
- 「依存関係を文章で説明して。変更に弱い順も教えて」
第11章:低結合① まずは「引数で渡す」🎁✨
-
ねらい🎯:“中で作らない”感覚を身につける
-
主な内容📚:メソッド引数/コンストラクタ引数の使い分け📦
-
ハンズオン🛠️:new を外へ追い出し、引数で受け取る🔁
-
AIプロンプト🤖
- 「このnewを外に出すなら、何を引数にすべき?」
第12章:低結合② interfaceで差し替え(超入門)🔌✨
-
ねらい🎯:差し替え可能の気持ちよさを体験する
-
主な内容📚:interface=契約📜/外側(時計・ログ・DBなど)から始める⏰🪵💾
-
ハンズオン🛠️:IClockなどを差し替えて動作を変える🔄
-
AIプロンプト🤖
- 「最小のinterface設計(メソッド最小)を提案して」
第13章:低結合③ DI(依存性注入)※コンテナ無し💉✨
-
ねらい🎯:DIの本質(差し替え)を理解して使える
-
主な内容📚:コンストラクタ注入が基本👶/組み立て役(簡易Composition Root)🏗️
-
ハンズオン🛠️:Program側で依存を組み立てて注入する✅
-
AIプロンプト🤖
- 「この構成の“組み立て役”をどこに置くのが自然?理由も」
第14章:結合の種類① フラグ引数をやめる🚩💦
-
ねらい🎯:責務混在を生む分岐を減らす
-
主な内容📚:boolで挙動が変わる=混ざりやすい🍲/分割・方針化🧩
-
ハンズオン🛠️:フラグ→別メソッド or 方針オブジェクトへ🔁
-
AIプロンプト🤖
- 「このフラグ分岐の改善案を3つ(メリデメつき)」
第15章:結合の種類② static依存(便利だけど代償)⚡💣
-
ねらい🎯:staticの“効きすぎ”をコントロールできる
-
主な内容📚:差し替えできない=テストと変更に弱い🧪/ラッパー→interface化🔌
-
ハンズオン🛠️:static呼び出しをラッパーに閉じ込める📦
-
AIプロンプト🤖
- 「static依存を弱める最小変更案を段階的に出して」
第16章:モジュール境界(迷子防止の土台づくり)📁🧭🔒
-
ねらい🎯:プロジェクトが大きくなっても崩れない“置き場所ルール”を作る
-
主な内容📚
- フォルダ/名前空間のルール(小さく始める)📏
- UI / Application / Domain / Infrastructure の箱分け📦
- 公開面を絞る(public/internalの超入門)🔒
- 依存の向き:内側(Domain)を守る🛡️
-
ハンズオン🛠️
- 既存コードを4箱へ仕分けして「依存の矢印」が自然になるように整える✍️➡️
-
AIプロンプト🤖
- 「この機能を4箱(UI/App/Domain/Infra)にどう仕分ける?理由も」
- 「依存の向きが変になりそうな箇所を指摘して」
第17章:総まとめミニプロジェクト(設計→実装→最小テスト)💪🎉
-
ねらい🎯:学んだことを“自分の手で”再現できるようにする
-
主な内容📚
- 17A:設計だけ(責務・依存矢印・クラス一覧)🗺️
- 17B:実装(高凝集・低結合を崩さず進める)🛠️
- 17C:最小テスト(I/O差し替え1本だけでもOK)🧪
-
ハンズオン🛠️
- 題材例:備品貸出📦/学食注文🍛/ToDo+締切通知✅(どれか1つ)
- まず“設計が合格ライン”に達してから実装へ進む(迷子防止)🧭
-
AIプロンプト🤖
- 「この設計案に“責務混在”と“依存増えすぎ”がないか、危険点TOP5」
- 「最小テスト1本で守るべき仕様(壊れやすい所)を提案して」