TL;DR

ドメインモデルはドメイン自体の概念だけに基づくべきであり、データベースやその他の永続化の仕組みを意識すべきではない、という考え方。

なぜ必要か

Microsoft の .NET アーキテクチャガイドによると、永続化の技術に左右されない型にしておけば、同じビジネスモデルをいろいろな方法で永続化できる。永続化の選択は時間とともに変わりうる。リレーショナルデータベースから別の技術に移ったり、Redis のキャッシュのような別の永続化先が加わったりする。

仕組み

同ガイドでは、永続化される型でありながら、そのコードが永続化技術の選択に影響されない状態を Persistence Ignorance(PI)と呼ぶ。.NET では、特定の基底クラスの継承やインタフェースの実装を必要としない型を POCO(Plain Old CLR Objects)と呼ぶことがある。

注意点

同ガイドは、次のような要求をこの原則への違反の例として挙げている。

  • 特定の基底クラスやインタフェースの実装を必須にする
  • クラス自身に保存の責任を持たせる(Active Record パターンなど)
  • 引数なしのコンストラクタや、永続化用の属性を必須にする

こうした要求があると、永続化される型と永続化技術の間に結合が生まれ、将来データアクセスの方法を変えにくくなる。

関連

出典