腐敗防止層(Anti-Corruption Layer)
定義
腐敗防止層(Anti-Corruption Layer, ACL)とは、外部システムや他の境界づけられたコンテキストのモデルが、自分のコンテキストのドメインモデルを汚染するのを防ぐための翻訳層。
外部システムのモデルをそのまま取り込む(追従者パターン)のではなく、ACLが翻訳を担うことで、ドメインは外部の都合に左右されずに自分の言語でモデルを維持できる。
外部APIのレスポンス (ExternalUserDto)
↓ ACL(翻訳)
自コンテキストのモデル (Customer)
なぜ重要か
ACLがないと:
- 外部システムの命名・概念・制約がコードに滲み込む
- 外部システムが変更されたとき、ドメインコードにまで修正が波及する
- ユビキタス言語が乱れる(外部の用語と自コンテキストの用語が混在)
ACLを設けることで、外部の変更に対してドメインモデルを保護し、統合ポイントのみを修正するだけで済む。
適用場面
- 外部APIやレガシーシステムと連携するとき
- 上流のコンテキストが「追従」を強いるほど強力で、交渉余地がないとき
- 外部システムのモデルが自分たちのユビキタス言語と大きく乖離しているとき
実装パターン
ACLは通常、以下のいずれかの形で実装する:
- ファサード(Facade):外部システムの複雑なAPIをシンプルなインターフェースで包む
- アダプター(Adapter):外部モデルを自コンテキストのモデルに変換する
- 翻訳サービス(Translation Service):複雑な変換ロジックを持つドメインサービス
関連概念
出典
実践ドメイン駆動設計(Vaughn Vernon)第3章