「設計の関心の分離(SoC)」教育コンテンツ:17章アウトライン🎯✨
第1章:SoCって何?まずは一言で掴む📌😊
- SoCの超短い定義
- “混ぜると地獄”が起きる理由
- 今日のゴール
第2章:混ざったコードが生む“修正地獄”あるある😇💥
- UI変更で業務が壊れる
- DB変更で画面が崩れる
- 「影響範囲が読めない」が一番つらい😭
第3章:SoCとSOLID(特にSRP)の関係🧩✨
- SRP(単一責務)とほぼ親戚👭
- 「責務=変更理由」
- まずは“責務を言葉にする”練習
第4章:分離の基本はこの3つだけ覚えればOK🙆♀️🪄
- 表示(UI)
- ルール(業務)
- 外部(DB/ファイル/HTTP)
- どれに属する?ミニ仕分けクイズ🎮
第5章:境界線を引く練習(最初は線引きだけで勝ち)✍️✨
- 入口(入力)と出口(出力)
- “混ざってる場所”を発見するコツ🔍
- 直す順番の基本(危険度の低いところから)
第6章:UIの関心を分ける(イベントハンドラを痩せさせる)🖥️🍃
- 画面が持つべきもの/持たないもの
- 「ボタン押下→業務呼び出し」までに絞る
- WinForms/WPFどちらでも通じる考え方👌
第7章:業務ロジックの関心を分ける(ルールの置き場所)🧠✨
- “業務の言葉”でメソッドを作る
- 例:割引、状態遷移、制約チェック
- 画面都合を業務に混ぜないコツ
第8章:データアクセスの関心を分ける(DBの都合を外に追い出す)🗄️🚪
- 業務がDB直呼びすると何が困る?
- “保存する人”を別にする発想
- Repositoryっぽい最小形(ライト版)🧩
第9章:なぜ「データの箱」を分けるの?(God Classの回避)📦🙅♀️
- “1つの万能クラス”が引き起こす悲劇
- 画面用・DB用・業務用は「関心」が違う
- 「分ける」=変更の影響を止める壁🧱
第10章:実践!データの詰め替え(ViewModel / DTO / Entity)🔄✨
- ViewModel(画面)、DTO(外部)、Entity(ルール)の使い分け
- 「詰め替え(Mapping)」は面倒だけど“保険”になる
- 手動マッピング vs AutoMapper(最初は手動がおすすめ)
第11章:依存の向き(DIPの入口)をSoCで体験🧲🌟
- 「中心(業務)」を守る依存の向き
- interface=差し替え口🚪
- “外側の都合”を内側に入れない
第12章:DI(依存性注入)の超入門(まずはコンストラクタ注入)💉😊
- newしないで渡すだけ
- テストで差し替えできる嬉しさ
- DIコンテナは“必要になってから”でOK👌
第13章:テストしやすいSoC(I/O境界の分離)🧪✨
- テスト不能の原因=I/O混入
- “純粋ロジック”を中心へ寄せる
- スタブ/モックは最小でOK🙆♀️
第14章:小さなリファクタでSoCに近づく手順🔧🌱
- 一気に直さない!段階的にやる
- メソッド抽出→クラス抽出→依存を外へ
- “動くまま切る”が大事😌
第15章:ケーススタディ(フォーム地獄→3分離)📚🔥
- Before:画面に全部入り
- After:UI / UseCase / Repositoryに分ける
- 読みやすさと修正しやすさを比較✨
第16章:AI導入前提の学び方(Copilot/Codexを味方に🤖💡)
- 分離したい時のプロンプト例
- “案を複数出させる”テク
- AIの提案を採用する前のチェック✅
第17章:サイト用「共通リソース集」🧰🌸
-
開発環境まとめ(Windows / Visual Studio / 必要ならVS Code)🪟
-
この教材で使う用語集(責務、境界、依存、I/O、DTO…)📖
-
テンプレ集
- フォルダ構成例(UI/Application/Domain/Infrastructure)
- interface命名の型(I〇〇Repository など)
- テスト雛形(Arrange-Act-Assert)🧪
-
AIプロンプト集(章共通で使えるやつ)🤖✨
-
よくある詰まりQ&A(“分けすぎた…”など)😵💫➡️😄