腐敗防止層
Domain-Driven Designのパターンの一つ。外部システムやレガシーコードとの境界に設置し、外部の概念モデルが内部ドメインを「汚染」するのを防ぐ変換層。
役割
- 外部システムの概念を内部ドメインの概念に変換
- 外部APIの変更から内部を保護
- 境界でのバリデーションとエラーハンドリング
制御結合との関係
JSON通信などで受け取る判別子(discriminator)を扱う際の設計パターン:
「入り口(Parser層)で一度だけ分岐を吸収し、内部は宣言的に実装する」
// 腐敗防止層での分岐吸収
function parseMessage(raw: RawMessage): DomainEvent {
switch (raw.type) {
case "user_created": return new UserCreatedEvent(raw);
case "user_deleted": return new UserDeletedEvent(raw);
// ここで一度だけ分岐
}
}
// 内部は型安全・宣言的
function handleEvent(event: DomainEvent) {
// ポリモーフィズムで処理、フラグ不要
event.apply(this.state);
}
これにより、制御結合の問題(内部に分岐ロジックが散らばる)を回避できる。
ハイブリッドアーキテクチャ
技術的制約下では、純粋なOOPだけでは対応できない場面がある。現実的な解決策:
- 境界層:手続き的(分岐、バリデーション)
- 内部:OOP的(ポリモーフィズム、型安全)
関連
- Domain-Driven Design - 出典
- 制御結合 - 解決する問題
- 判別共用体 - 境界での型表現
- Clean Architecture - 境界の設計