永続化を実装するには?


FlyweightFactory Edit

キーを返すメソッドと、キーが必要なメソッドがある。

ファイルを扱うのでFlyweightパターン。ファイルの変更は行わない。生成と削除と読み取りだけ。
http://www.ie.u-ryukyu.ac.jp/~e085739/java.it.11.html

  • Fetch(Keys) => Objects | Null
    キーが必要。
    呼び出してからロックを取得するので、要求したオブジェクトが消えている場合がある。
    呼び出し後はすでにロックが解除されている。
    存在確認のために使うこともできる。
  • Store(Key, Object) => Key | Null
    キーが必要。
    保存できていたらそのキー/さもなくば「保存できなかった」という何かを返す。
    :i/シリアライズが必要
  • Search(path:String = "", label_value_pairs:Dictionary = {}, extensions:Strings = {}) => Key
    キーを生成。
    いろいろ指定 → 適合するキー(複数)
    いろいろとは…キーの一部 または永続化クラスが特別視する部分…例えばクラス名とか。
    存在するキーになるよう補完して返す。指定のないフィールドがワイルドカード化。正規表現不要。何も指定されないと存在する全てのキーを返す。
  • ValidateKeys(Keys) => ValidKeys
    キー(複数) → 使えるキー(複数)
    永続化クラス内部で使われるので、呼び出し側が使う必要は無い。
    Storeせずに使えるキーを得るために。
    →Key.New()でいい。
  • Lock(Key, UseBlocking:bool) => bool
    他のStore()を禁止。
    Store()のための存在確認としても使える。
  • Unlock(Key) => true
    ロック解除できなければ例外。
    すでに解除されているかロックできてないのに呼んだ場合はアサーションエラー。アサーションが無効化されているなら解除成功とする。

Key Edit

実装では”FlyweightKey”のような名前にして。

  • .New(String) => Key
    キーを生成。
  • .New(path:String = "", label_value_pairs:Dictionary = {}, extensions:Strings = {}) => Key
    キーを生成。
    Searchと同じ引数。こちらは存在しないキーを生成して返す。何も指定しないときは完全におまかせ。

例えば… Edit

Search→Fetch
Key.New→Store
組み合わせて使う。

:i/シリアライズが必要 Edit