Skip to main content

モジュラーモノリス教育コンテンツ:30章・詳細アウトライン🏠🧩✨

第1章 はじめに:モジュラーモノリスって何?🏠✨

  • 目標:モノリスのまま内部を分割して強くする
  • モノリス/モジュラーモノリス/マイクロサービスの違い
  • よくある悩み:変更が怖い、影響範囲が読めない😵

第2章 “モジュール”の正体:フォルダ分けじゃないよ📦🙅‍♀️

  • モジュール=責務のまとまり+境界(ルール)
  • 「見た目だけ分割」の失敗例💥
  • “境界を越える”とはどういうこと?

第3章 題材紹介:ミニECで学ぶよ🛒😊

  • 商品(Catalog)・注文(Ordering)・会員(Identity)
  • 代表ユースケース(注文する、支払う、発送する)
  • ざっくり境界候補を線引きしてみる🖍️

第4章 設計の超基本:SoC(関心の分離)✂️✨

  • UI/業務/永続化/外部I/Oを混ぜない
  • “混ぜた地獄”の例を見て納得する😇

第5章 境界づけ入門:Bounded Contextのミニ版🧱🌍

  • 同じ単語でも意味が違う問題(Orderの例)
  • まずは「衝突しそうな言葉」を分けるコツ

第6章 ソリューション構成:Visual Studioで作る基本形🛠️🪟

  • SolutionとProjectの分け方(最小構成)
  • 命名ルール(Modules / Shared / Host)
  • VS Code併記:フォルダ構成の見え方👀

第7章 モジュール内レイヤー:Domain / Application / Infrastructure 🧅✨

  • 役割の違い(初心者向けに超やさしく)
  • 「Domainはルールの中心」って何?😊

第8章 依存関係ルール:参照していい方向だけにする🚦📌

  • 例:Domain → ApplicationはOK?(ルール決め)
  • “外側の詳細”を内側に入れない理由

第9章 DIP/DI超入門:境界はinterfaceで守る🧩🔌

  • interfaceの意味(差し替え・テスト)
  • newしないで渡す(コンストラクタ注入)
  • DIコンテナは「後でOK」👌

第10章 公開API設計:モジュール間は“窓口”だけで話す📣🪟

  • 他モジュールを直接触らないルール
  • 公開インターフェースとDTO
  • 依存が雪だるまになるのを防ぐ☃️

第11章 Sharedの扱い:共有は“最小”が正解⚠️🍱

  • 共有しがちなもの(Utils/共通DTO)あるある
  • Sharedに入れていいもの・ダメなもの🙅‍♀️
  • “ドメイン知識”はSharedに置かない

第12章 データ境界①:Repositoryって何者?🗃️✨

  • Repositoryの役割(ドメインをDBから守る)
  • Application/Domainとどう繋ぐ?

第13章 データ境界②:DBが1つでもモジュール分けはできる🧠🗄️

  • 「DB1つ=分けられない」は誤解😆
  • スキーマ分割/テーブル所有の考え方
  • “誰がそのデータの責任者?”を決める

第14章 データ境界③:Migration運用の最小ルール🧰✅

  • Migrationの流れ(作成→適用→レビュー)
  • モジュール単位での整理の仕方
  • 事故を減らすチェックリスト📋

第15章 集約(Aggregate)入門:一貫性を守る単位を決めよう🔒🧱

  • 1回の更新で必ず整合する範囲
  • 集約ルート経由でのみ更新(なぜ?)

第16章 CQS入門:更新と参照を分けると超ラク✍️👀

  • CommandとQueryを混ぜない
  • APIが読みやすくなる体験✨

第17章 エラー設計①:エラーを“仕様”として分類する🚧🧩

  • 入力エラー/業務ルール違反/インフラ障害
  • リトライ可能?ユーザーに見せる?👀

第18章 エラー設計②:例外とResultを使い分ける😵‍💫✅

  • 例外を投げる場所・止める場所
  • 境界でResultに変換して整える

第19章 ドメインイベント①:イベントって何?(過去形がコツ)🔔🕰️

  • “起きた事実”を表現する
  • OrderPaid / OrderShipped のように過去形

第20章 ドメインイベント②:どこで発行する?(Raiseポイント)📍🔔

  • 集約内で出す?アプリ層で出す?
  • “一貫性を壊さない”発行位置の考え方

第21章 ドメインイベント③:ハンドラ設計(副作用は外へ)📦📩

  • メール送信・通知・ログなどは外に逃がす
  • 疎結合で機能追加できる快感😆✨

第22章 Outbox①:なぜ必要?「DB更新とイベント送信がズレる」問題📤💥

  • 失敗例(更新成功、送信失敗…)😇
  • “ズレ”が起きる現実(ネットワーク、再試行)

第23章 Outbox②:最小Outbox実装(テーブルに書くだけ)🗒️✅

  • Outboxテーブル設計(最低限)
  • 更新とOutbox書き込みを同一トランザクションに

第24章 Outbox③:配信処理の基本(ポーリング/バッチ/別プロセス)🔁🚚

  • 送信の流れ(未送信→送信→完了)
  • 重複送信に備える(次章の冪等性へ)

第25章 冪等性:リトライ前提で壊れない設計🔁🛡️

  • 冪等キー/重複排除
  • “二重適用”を状態遷移で防ぐ

第26章 状態機械①:状態遷移表を作ってみよう🚥📋

  • 状態(Created/Paid/Shipped/Cancelled…)
  • 許される遷移・禁止遷移を書き出す

第27章 状態機械②:ガード条件(条件付き遷移)を整理する🧠🚦

  • 「支払い済みなら発送OK」みたいな条件
  • ガード条件が散るとバグる😵→まとめる

第28章 状態機械③:C#で“漏れ”を防ぐ(型で守る)🧱✨

  • enumだけで終わらせない工夫
  • “許可されない遷移はコンパイルで気づける”方向へ

第29章 テストと崩壊防止:モジュール境界を守り続ける🧪🛡️

  • I/O分離でロジックを単体テスト
  • モジュール単位のテスト方針
  • 参照ルール破りを検出する考え方(自動チェック)🔍

第30章 移行&卒業制作:既存モノリスを育てて完成🏁🎉

  • 段階移行(痛い所から切る)🩹
  • “最初に切る境界”の選び方
  • 最終課題:自分の題材でモジュール化して提出✨

各章に必ず付ける「学習セット」🎁😊

  • 今日のゴール🎯
  • まずダメ例😇→良い例😎
  • 手を動かす(C#)⌨️
  • ミニ演習📝
  • AI活用プロンプト例🤖✨
  • まとめ(覚える1行)📌

必要なら、この30章アウトラインをさらに“教材っぽく”して、 各章の所要時間の目安・演習の難易度・提出物まで付けた「カリキュラム表」にもできるよ😊📚✨