理系学生日記

おまえはいつまで学生気分なのか

PoEAA: Identity Map

今日も引き続き Chapter 11. の Object-Relational Behavioral Pattern で、Identify Map です。

Identity Map は一度ロードしたオブジェクトを Map に保持しておいて、それ以上同じオブジェクトをロードしないようにするパターンです。

世の中、1 つしか持ちたくないオブジェクトというのは割と多いもので、例えば同じセッション上で DB から同じレコードを 2 回読み込み、それぞれを異なるオブジェクトとして保持したとすると、どちらを更新すれば良いのか分からなくなったりします。 Identity Map はこれを防ぐために、キャッシュのように振舞います。つまり、オブジェクトを保持しておき、既に存在しているオブジェクトに対する読み出し要求があった場合は、自身(Map) からそのオブジェクトを返却します。 そういう意味で、あまり目新しさはないパターンかもしれません。

設計ポイント

設計ポイントとしてはいくつかあるようで。

  1. Map のキーとして何を採用するのか
    • サロゲートキーを採用しているとすると、そのサロゲートキーを使用するのが自然
    • Identity Map は DB のレコードを保持することに制限されないことには注意
  2. Map を Generic にするか否か
    • これは設計に依るが、型安全を保証するのなら具象型を指定するのもアリ
    • Generic にするためには、Map に保存する型が全て同じキーで区別できる必要がある
      • DB のレコードを保存するという前提を置くと、やっぱりサロゲートキーを採用するか否かに左右される

まぁ今日はあまり特筆すべきパターンではなかったので、これといって書くこともなさそうです。。。