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

腐敗防止層(ACL)教育コンテンツ:20章 詳細アウトライン 🧼🧱✨

第1章:ACLってなに? “腐敗”ってなに?(最短でイメージ)🧼💡

  • ねらい:ACLの役割を「一言で言える」ようにする

  • 学ぶこと

    • 外部の仕様・クセ・歪みが “内側の設計” を壊すってどういうこと?😵‍💫
    • ACL=翻訳&防波堤(外→内をキレイにする壁)🧱
  • ハンズオン:ダメ例コードを眺めて「どこが腐ってる?」探しゲーム👀

  • ミニ課題:あなたの経験で「外部の都合でつらかった話」を1個メモ📝

  • AI活用:AIに「このコードの腐敗ポイントを箇条書きで」って聞く🤖


第2章:教材の全体地図&題材システム紹介(ミニEC/フリマ)🗺️🛒

  • ねらい:ゴールが見えて安心する😌

  • 学ぶこと

    • 内側:注文(Order)/支払い(Payment)/会員(Member)
    • 外側:決済API(クセあり)+レガシー会員API(古い)
  • ハンズオン:プロジェクト雛形を作成(Visual Studio)🧰

    • 余裕があれば VS Code手順も小さく添える📌
  • ミニ課題:フォルダ構成の意図を1行で説明✍️

  • AI活用:AIに「フォルダ構成案を3パターン」出させる(採用は自分で)🤖


第3章:関心の分離(SoC)だけ先に押さえる(ACLの前提)🚪🧠

  • ねらい:「混ぜない」感覚を先に作る

  • 学ぶこと

    • UI/アプリ/ドメイン/外部I/Oを混ぜると壊れる⚡
    • ACLは “外部I/O側のガード役” になりやすい
  • ハンズオン:層の線引き図を作る(紙でもOK)✍️

  • ミニ課題:「内側に入れていいもの/ダメなもの」仕分け表🧾

  • AI活用:AIに図の説明文を作らせる(レビューは自分)🤖


第4章:超入門DDD:ドメインの“言葉”を決める(ユビキタス言語っぽく)🗣️📘

  • ねらい:内側の言葉を外側に汚されない土台を作る

  • 学ぶこと

    • Order / Money / PaymentStatus など、意味がズレやすい単語に注意👀
  • ハンズオン:用語辞書(ミニ)を作る📒

  • ミニ課題:曖昧語を3つ挙げて「自分の定義」を書く✍️

  • AI活用:AIに「曖昧になりやすい語」を洗い出させる🤖


第5章:ValueObject入門(住所・金額・期間を“型”で守る)🧱💰

  • ねらい:外部の変な値が入っても壊れにくい“型の盾”を作る

  • 学ぶこと

    • 値オブジェクトの考え方(同一性より“値”)
    • バリデーションを入口に寄せる🔒
  • ハンズオンMoneyEmail みたいな小VOを作る

  • ミニ課題:VOにしたい項目を3つ提案📝

  • AI活用:VOの雛形生成はAIに、ルールは自分が決める🤖✍️


第6章:不変条件(Invariants)と “無効状態を作らない” ルール👮‍♀️🧯

  • ねらい:外部の欠損/不正が入っても、内側は壊れないようにする

  • 学ぶこと

    • 生成・更新でチェックして「壊れた状態」を禁止🚫
  • ハンズオン:コンストラクタ/Factoryで検証パターン

  • ミニ課題:「絶対守りたいルール」2つ書く

  • AI活用:テストケース案をAIに列挙させる🤖✅


第7章:境界の引き方(内側/外側)と依存関係ルール⬅️🧭

  • ねらい:「どこに置くか」で迷わなくする

  • 学ぶこと

    • ドメインは外部を参照しないの基本
    • 依存の向きの統制(内向き)
  • ハンズオン:プロジェクト参照ルールを決める(簡単な図でOK)🧩

  • ミニ課題:「禁止依存」リスト作成📝

  • AI活用:AIに“依存ルールの文章化”を手伝わせる🤖


第8章:ACLの基本形(Client / Translator / Facade)を覚える🧰🧱

  • ねらい:ACLを“いつも同じ型”で作れるようにする

  • 学ぶこと

    • 外部DTO → Translator → ドメイン型
    • ドメイン側は “自分用のインターフェース” だけ見る👀
  • ハンズオン:3点セットの空実装を作る

  • ミニ課題:各パーツの責務を1行で説明

  • AI活用:命名案(Client名/Translator名)をAIから複数出してもらう🤖


第9章:DIP/DI入門(外部サービスを差し替え可能に)🔌🔁

  • ねらい:テストできる&外部変更に強くする

  • 学ぶこと

    • ドメインに IPaymentGateway 的な 抽象を置く
    • 実装は外側(Infrastructure)で差す
  • ハンズオン:コンストラクタ注入で組む(DIコンテナの基本も軽く)

  • ミニ課題:差し替えたい依存を2つ挙げる

  • AI活用:DI登録コードの下書き生成はAIで時短🤖⚡


第10章:外部DTOと内部モデルを分ける(“DTO直通”禁止🙅‍♀️)📦📦

  • ねらい:腐敗の入口を閉じる

  • 学ぶこと

    • 外部JSON用DTOは外側に隔離
    • 内側はドメイン型(VO/Entity)中心
  • ハンズオン:DTOフォルダを外側に置き、参照できないようにする

  • ミニ課題:DTOに入れたくない情報を列挙📝

  • AI活用:DTOクラス生成(プロパティ)だけAIにやらせる🤖


第11章:変換① “形の変換”(命名・構造・ネスト)🧩🔁

  • ねらい:まず「形」を揃える(意味の前に)

  • 学ぶこと

    • snake_case ↔ PascalCase
    • ネスト構造の読み替え
  • ハンズオン:Translatorで「形」だけ変換する

  • ミニ課題:入力DTO→出力モデルの対応表を作る🧾

  • AI活用:マッピング表の叩き台をAIに作らせる🤖


第12章:変換② “意味の変換”(単位・通貨・時刻)💰⏰🔁

  • ねらい:ここからがACLの本番✨

  • 学ぶこと

    • cents→円、UTC文字列→DateTimeOffset など
    • “意味がズレる”ポイントを見抜く目👀
  • ハンズオンMoney/TimeStampに正規化

  • ミニ課題:意味変換が必要な項目を5つ探す🔎

  • AI活用:境界値テスト案をAIに出させる🤖✅


第13章:変換③ enum・未知値・仕様の穴(安全第一)🧯🧪

  • ねらい:「知らない値が来たら死ぬ」を卒業する

  • 学ぶこと

    • 外部enumが増えたり、謎値が来たりする現実😇
    • 未知値はどう扱う?(エラー/Unknown/保留)
  • ハンズオン:安全なenum変換(Unknown設計)

  • ミニ課題:Unknown方針を文章で書く(運用も含めて)📝

  • AI活用:未知値パターンの洗い出しにAIを使う🤖


第14章:欠損・null・不正値① 方針の決め方(弾く?丸める?)🧹📏

  • ねらい:判断基準を作る(ここが迷子ポイント)

  • 学ぶこと

    • どこで守る?(ACL / ドメイン / UI)
    • “入力は疑う、内側は信じる”の境界感覚
  • ハンズオン:判断フローチャート作成(簡単でOK)🗺️

  • ミニ課題:項目ごとに方針を書く(弾く/補正/既定)

  • AI活用:フローチャートの文章化をAIにやらせる🤖


第15章:欠損・null・不正値② 実装演習(変換+検証+エラー化)🧪🚧

  • ねらい:ACLの“防波堤”を手で作れるようにする

  • 学ぶこと

    • 変換時に弾く
    • ドメインエラーに落とす
  • ハンズオン:意地悪データを流して防御できるか確認😈

  • ミニ課題:悪い入力10個セットを作る(テストデータ)

  • AI活用:悪い入力パターン生成にAIを使う🤖😈


第16章:エラー設計① 分類(ドメイン/インフラ/一時的/恒久的)😇📚

  • ねらい:エラーでコードがぐちゃぐちゃになるのを防ぐ

  • 学ぶこと

    • ドメインエラー:業務ルール違反
    • インフラエラー:通信/タイムアウト/外部障害
    • リトライ可否の考え方🔁
  • ハンズオン:エラー分類表を作る🧾

  • ミニ課題:例題で「これはどの分類?」クイズ

  • AI活用:分類候補をAIに出させて、自分で最終判断🤖✅


第17章:エラー設計② 境界で変換する(外→内の翻訳)🔁🧱

  • ねらい:外部のエラー形式を内側に持ち込まない

  • 学ぶこと

    • 外部エラーDTO → 自前エラーへ
    • UIに返す形はさらに別(必要なら)
  • ハンズオン:外部のエラー応答を受けて整形する

  • ミニ課題:エラーコード設計(小さくでOK)

  • AI活用:エラー文言のユーザー向け表現案をAIに作らせる🤖💬


第18章:実装ハンズオン① 外部API統合(HttpClient + デバッグ)🌐🪲

  • ねらい:外部呼び出しの基本を固める(迷子防止)

  • 学ぶこと

    • HttpClientの使いどころ
    • 例外・タイムアウト時の見方
    • Visual Studioデバッグ(ブレークポイント、ウォッチ)🔍
  • ハンズオン:外部決済API(モックでもOK)を叩く

  • ミニ課題:成功/失敗/タイムアウトの3パターン確認

  • AI活用:ログ出力の雛形、例外メッセージ整形はAIに補助してもらう🤖


第19章:実装ハンズオン② レガシー統合(“意味のズレ”を翻訳する)🧓📼

  • ねらい:ACLが一番輝く相手(レガシー)で勝つ✨

  • 学ぶこと

    • 命名が古い、単位が違う、欠損が多い…をACLで吸収
    • 腐敗防止層=“翻訳者”の仕事🧑‍🏫
  • ハンズオン:レガシー会員API → Memberドメインへ変換

  • ミニ課題:「翻訳ルール集(ミニ仕様書)」を書く📘

  • AI活用:翻訳ルールの一覧化・チェックリスト化にAIを使う🤖📝


第20章:テスト&運用まとめ(変換テスト・契約テスト・観測)+最終チェックリスト🎁✅📈

  • ねらい:作って終わりじゃなく “壊れない仕組み” にする

  • 学ぶこと

    • 変換テスト:Translatorは最重要(コスパ最強)💪
    • 契約テスト入門:外部の変更を早期検知🤝
    • 観測:ログ・相関IDの入れ方(最低限でOK)👀
  • ハンズオン

    • Translatorの単体テスト作成
    • 契約テスト(超ライト)
    • ログに相関IDを通す
  • ミニ課題:ACL導入チェックリストで自己採点💯

  • AI活用

    • テスト雛形生成、テストケース増量はAI
    • “仕様の最終判断” は人間(ここ超大事)🧠✨

章の流れ(気持ち)🌸

  • 1〜4章:イメージ&言葉を整える🙂
  • 5〜7章:内側を守れる設計の土台🛡️
  • 8〜13章:ACLの型+変換3連発(形→意味→未知値)🔁
  • 14〜17章:欠損とエラー(実戦で一番効く)🧯
  • 18〜20章:統合→レガシー→テスト運用で完成🎉