T

Titanium MobileでSQLiteをDataMapperっぽく扱う

Titanium MobileはSQLiteを扱うための基本的な機能は一通り揃っているのですが、うまくラップしてくれるものがありません。例えば、ActiveRecordやDataMapperみたいな感じで、ウェブ開発者にもとっつきやすいモデルを作るヘルパーが欲しいなと思ったので作り始めました。

理想的には、こんな感じで使いたいです。まずモデル。

Database = require('libs/database')
class Entry extends Database
  initialize:()->
    @property 'title', 'text'
    @property 'body', 'text'
    super
module.exports = new Entry('entries')

requireはどっかでやっておけばいいんですが、モデルのクラスはなんかのクラス(上ではDatabase)を継承して、基本的にはテーブルの定義をするだけ。リレーションは…まあ、難しいので後回し。上の例では2つだけカラムの定義を設定していますが、PRIMARY KEYかつAUTO INCREMENTなidとdatetime型のcreated_atとupcated_atは自動で作られるのがいいです。ただ、サーバ側のデータと同期するなどの理由でidをAUTO INCREMENTしたくない場合もあるのでオプションでオフにできるといいですね。

モデルを使う側はこんな感じ。

Entry = require('models/entry')

new_entry = Entry.create()
new_entry.title = "I wish I was a fisherman"
new_entry.body = "Whew!"
new_entry.save()

entry = Entry.find_by_id(1)
entry.title = 'I wish I was a brakeman'
entry.update()

entries = Entry.all
for ent in entries
  ent.destroy()

うん、DataMapperっぽい。とりあえず、ここまで動いてそうなものを公開しておきます。もちろんいろんな機能がありません。リレーションとか、ページネーションとか。まあ、気が向いたらおいおい。あ、Androidでしか動かしてませんが、たぶん大丈夫でしょう。忙しくてあんまりいじれないので、みんなよってたかって直してください。

Posted by on 7月 4, 2012 in Android, Titanium

コメントを残す