【ふはいぼうしそう】
腐敗防止層(Anti-Corruption Layer) とは?
最終更新:
💡 外部の都合を内部へ持ち込まない、ドメインの「翻訳窓口」
意味やデータモデルの異なるシステムを連携させるとき、外部側の概念に自分のドメインモデルが引きずられないよう、要求やデータを翻訳する境界の層。DDDに由来するパターン。
📌 このページのポイント
- 外部と内部のモデルや概念の違いを境界で翻訳する
- FacadeやAdapterとして実装でき、アプリ内の部品にも独立サービスにもできる
- 段階的なレガシー移行や、意味の異なる外部システムとの連携に使う
- 変換処理の保守、遅延、データ整合性も考える。すべての連携に必須ではない
何が「腐敗」するの?
どうやって防ぐの?
境界に翻訳層を置く。外部へ送る要求は外部の形へ、受け取ったデータは内部のモデルへ変換するんだ。内部のコードが外部の細かな仕様を直接扱う範囲を小さくするよ。
JSONを別の形式に変えればいい?
形式だけでは足りない場合があるよ。例えば外部の顧客コードと内部の会員IDの対応、金額の単位や状態の意味なども合わせる必要がある。単に名前を変えても意味の違いは消えないんだ。
別のサービスとして作るの?
アプリ内の部品にも独立サービスにもできるよ。AdapterやFacadeを使うこともあるけれど、三種類の部品を必ず全部そろえる決まりではない。目的は内部のモデルを守ることなんだ。
移行にはいつも必要?
新旧システムを段階的につなぐときに役立つけれど、意味の違いが小さければ不要な場合もある。変換の保守や遅延、データ整合性を考えて選ぶんだ。層を置くだけで移行が安全になる保証はないよ。
まとめ:ざっくりこれだけ覚えればOK!
「腐敗防止層」って出てきたら「外部システムの都合を内部へ持ち込まない翻訳層」と思えばだいたいOK!
📖 おまけ:英語の意味
「Anti-Corruption Layer」 = モデルの汚染を防ぐ層
💬 ここでのcorruptionは、外部のモデルや意味に内部の設計が引きずられることを表すよ。外部システムが必ず悪い設計という意味ではないんだ。