腐敗防止層という考え方がある。DDDを中心に層ベースの設計論ではしばしば見る、外部の何かしらを変換する責務を担当する層だ。
自分はこの層に10年来疑問を抱かずにやってきた。だがここ数年、分散システムを担当するようになってからは違和感を覚えるようになった。
というのも、腐敗はするのである。
それは相手システムもそうだし、なんなら自分のアプリケーションも腐る。腐らないプログラムなんて正直ない。
そんな時思った。この層は「腐敗を防止」させたいんじゃない、よそ様の事情をうちの事情に「従わせる」場所なんだな。
「あんたはスキーマを0件から無限件の配列と定義しているかもしれない、でも実情は最小1件から最大5件の有限配列じゃないか」
といった具合である。
永続化層での抽象化と、アプリケーション層での「実情に基づいた規則化」は異なるのである。データベースが理論的にいくらでもデータを入れられるようになっていたとしても「画面上に表示するようでは限界がある」のである。これは一例だが。
そのため自分は最近、腐敗防止層ではなく「郷に入っては郷に従え層」だと思っている。自分たち(アプリケーション)として、この概念どうあってほしいのか、それに従わせる場所なのであると。