【ふはいぼうしそう】

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

最終更新:
💡 お隣のゴチャゴチャを持ち込ませない、ドメインの『空気清浄機』
📌 このページのポイント
腐敗防止層(Anti-Corruption Layer) 外部システム レガシーまたは サードパーティ CustomerRecord legacy_order_tbl XML形式API 腐敗防止層 アダプター トランスレーター ファサード 自ドメイン クリーンな ドメインモデル 会員エンティティ 注文エンティティ RESTful API 外部の設計 → 腐敗防止層で翻訳 → 自ドメインのモデルに変換
腐敗防止層のイメージ
ひよこ ひよこ
腐敗防止層って名前が怖いんだけど、何が「腐敗」するの?
ペンギン先生 ペンギン先生
ここでいう腐敗は、外部システムのデータ構造や設計思想が自分のドメインモデルに入り込んで、コードがぐちゃぐちゃになることだよ。たとえばレガシーシステムの変なテーブル構造に引きずられて、新しいシステムまで変な設計になるイメージだね
ひよこ ひよこ
具体的にはどうやって防ぐの?
ペンギン先生 ペンギン先生
間に変換層を挟むんだ。外部システムのデータ形式を受け取って、自分のドメインモデルに翻訳するアダプターを作る。逆方向も同じ。こうすれば外部の都合が内部に漏れないよ
ひよこ ひよこ
ただのラッパーと何が違うの?
ペンギン先生 ペンギン先生
いいところに気づいたね。単なるラッパーはインターフェースを薄く包むだけだけど、腐敗防止層はドメインの概念レベルで翻訳するんだ。外部の「CustomerRecord」を自分のドメインの「会員」に変換するような、意味のある変換をするのがポイントだよ
ひよこ ひよこ
どんなときに使うのが一番効果的なの?
ペンギン先生 ペンギン先生
レガシーシステムとの統合や、外部APIとの連携が代表的だね。特にストラングラーフィグパターンでレガシーを段階的に置き換えるときに、腐敗防止層で新旧を隔離しておくと安全に移行できるんだよ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「腐敗防止層」って出てきたら「外部システムの都合を自分のコードに持ち込ませない変換レイヤー」と思えればだいたいOK!
📖 おまけ:英語の意味
「Anti-Corruption Layer」 = 腐敗(モデルの汚染)を防止する層
💬 DDDの文脈で「腐敗」とはドメインモデルが外部の設計に引きずられて崩れることを指すよ。かなり強い言葉だけど、それだけ重要なパターンなんだよ
← 用語集にもどる