2011年12月25日日曜日

Slim3ソースコード読み会(2)の前に。

次回のSlim3 Source Code Reading #2が12/27(火)に開催されるのですが、
次回はmodel周りを読んでいく予定になっています。

ただ、model周りはデータストアへの読み込み、書き込みがあるため、
奥が深いので、事前に少し読んでおこうと思って読んでみました。

ひとまずメモを残しておきます。

  • Slim3はAsyncDatastoreServiceを使ってデータストアに書き込みを行っている。
非同期での書き込みなので、何もしなければ更新がすぐに反映されない(表示されない)時がある。

  • ModelクラスからModelMetaクラスを生成してデータストアに書き込みを行う。
    • ModelMetaクラスはVersionを持っている(データストアに書き込まれる)
      • Versionはputのたびにカウントアップされる。これはなぜ?
    • 同じく、SchemaVersionも持っている(データストアに書き込まれる)
      • 生成された直後は固定で"1"を書きこむ
      • SchemaVersionはプログラムの更新により、エンティティの内容が混在する時に新旧のバージョンのエンティティを判定するのに使う?
      • Modelのプロパティが追加される時にSchemaVersionも変更すべき?
  • Model→Modelの生成手順
例:slim3.model.Tweet
1. クラス名(フルパス)から".model."を探す。
2. 見つかった場合(lastIndexOf()の戻り値が0以上)
".model."より前、(今回の場合、"slim3") + ".meta." + "Tweet" + "Meta"にする
3. 見つからない場合は、そのまま+"Meta"にする
4. 2、3で生成したクラス名でインスタンスを生成する。
5. 1度生成されたMetaクラスは変換前のクラス名をキーにしてConcurrentHashMapに保存される。(2度目以降はHashMapにあるインスタンスを読みだして再利用する)