Slim3でModelを便利に扱う
Slim3のModelを使うと便利になることがたくさんある。
プロパティをタイプセーフに扱うのは言わずもがなだけど、他にも色々と用意してくれている!
まずは、ModelMetaの機能として、以下のような感じ。
上記はModelとJSONの変換をやってくれるメソッド達。
modelToJson()
jsonToModel()modelsToJson()
jsonToModels()
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
ユーザが入力した条件で、絞り込みや並び順を変更するというのも良いかも。
特に条件が動的になるものは、カスタムインデックスがえらいことになるので・・・。
でも、Datastore~~で使うとDatastoreにアクセスしているように見えるので、
実際に使う時は、ModelUtilみたいなのを作って、くるんであげた方が良さそう。
件数が多くて無理!って場合は、FullTextSearchを使うのが良いのかなぁ?
その辺りはshin1ogawa殿のBlogを見ていただければ!
404 shin1のつぶやき ないわー Not Found: App Engine Full-text Search API の使いどころ
文字ばかりになってしまったので、また今度サンプルソースを書こう・・・。