読者です 読者をやめる 読者になる 読者になる

理系学生日記

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

忍者TOOLS

PoEAA: Identity Map

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

Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler))

Patterns of Enterprise Application Architecture (Addison-Wesley Signature Series (Fowler))

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

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

設計ポイント

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

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

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