SiNBLOG

140文字に入らないことを、極稀に書くBlog

Slim3でModelを便利に扱う

Slim3のModelを使うと便利になることがたくさんある。
プロパティをタイプセーフに扱うのは言わずもがなだけど、他にも色々と用意してくれている!


まずは、ModelMetaの機能として、以下のような感じ。


modelToJson()
jsonToModel()

modelsToJson()
jsonToModels()

上記はModelとJSONの変換をやってくれるメソッド達。
Modelのgetter/setterがあるフィールドを、相互に変換してくれる。
KeyをBase64で変換してくれたりする心遣いもある。


次はDatastoreクラスの機能。

DatastoreクラスはSlim3でDatastoreにアクセスするために利用するクラスだけど、
filterInMemory, sortInMemoryはDatastoreにアクセスしなくとも使える事に気付いた!


//sortNumberフィールドの昇順にソート
Datastore.sortInMemory(models, ModelMeta.get().sortNumber.asc);

上記のような感じで使える。
これなら、1ユーザ辺りの件数があまり多くないものならば、
Modelとして作ったクラスをJSONにして、Datastoreに保存しておき、
filterInMemory, sortInMemoryで絞り込みや並び順の変更をするということもできる。


全件取得したListをMemcacheに入れておき、
ユーザが入力した条件で、絞り込みや並び順を変更するというのも良いかも。
特に条件が動的になるものは、カスタムインデックスがえらいことになるので・・・。


でも、Datastore~~で使うとDatastoreにアクセスしているように見えるので、
実際に使う時は、ModelUtilみたいなのを作って、くるんであげた方が良さそう。


件数が多くて無理!って場合は、FullTextSearchを使うのが良いのかなぁ?
その辺りはshin1ogawa殿のBlogを見ていただければ!

404 shin1のつぶやき ないわー Not Found: App Engine Full-text Search API の使いどころ


文字ばかりになってしまったので、また今度サンプルソースを書こう・・・。