【ふはいぼうしそう】

腐敗防止層(Anti-Corruption Layer) とは?

最終更新:
💡 外部の都合を内部へ持ち込まない、ドメインの「翻訳窓口」

意味やデータモデルの異なるシステムを連携させるとき、外部側の概念に自分のドメインモデルが引きずられないよう、要求やデータを翻訳する境界の層。DDDに由来するパターン。

📌 このページのポイント
腐敗防止層:モデルの意味を翻訳 内部 会員ID 翻訳層 対応づけ 外部 顧客コード 要求は外部の形へ、応答は内部の形へ 形式だけでなく、単位や状態の意味も合わせる 内部のモデルを外部の仕様から隔離 変換の保守・遅延・整合性を検討
会員IDと顧客コードは説明例。XMLからRESTへ変えることが必須という意味ではない。
ひよこ ひよこ
何が「腐敗」するの?
ペンギン先生 ペンギン先生
外部システムのデータ構造や概念に合わせ続けることで、自分たちが扱いたいドメインモデルが崩れることを指すよ。外部側が正しくても、こちらとは業務上の意味が違う場合があるんだ。
ひよこ ひよこ
どうやって防ぐの?
ペンギン先生 ペンギン先生
境界に翻訳層を置く。外部へ送る要求は外部の形へ、受け取ったデータは内部のモデルへ変換するんだ。内部のコードが外部の細かな仕様を直接扱う範囲を小さくするよ。
ひよこ ひよこ
JSONを別の形式に変えればいい?
ペンギン先生 ペンギン先生
形式だけでは足りない場合があるよ。例えば外部の顧客コードと内部の会員IDの対応、金額の単位や状態の意味なども合わせる必要がある。単に名前を変えても意味の違いは消えないんだ。
ひよこ ひよこ
別のサービスとして作るの?
ペンギン先生 ペンギン先生
アプリ内の部品にも独立サービスにもできるよ。AdapterやFacadeを使うこともあるけれど、三種類の部品を必ず全部そろえる決まりではない。目的は内部のモデルを守ることなんだ。
ひよこ ひよこ
移行にはいつも必要?
ペンギン先生 ペンギン先生
新旧システムを段階的につなぐときに役立つけれど、意味の違いが小さければ不要な場合もある。変換の保守や遅延、データ整合性を考えて選ぶんだ。層を置くだけで移行が安全になる保証はないよ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「腐敗防止層」って出てきたら「外部システムの都合を内部へ持ち込まない翻訳層」と思えばだいたいOK!
📖 おまけ:英語の意味
「Anti-Corruption Layer」 = モデルの汚染を防ぐ層
💬 ここでのcorruptionは、外部のモデルや意味に内部の設計が引きずられることを表すよ。外部システムが必ず悪い設計という意味ではないんだ。

参考資料

← 用語集にもどる