Skip to main content

ScalaからDatastoreを更新したい

· 2 min read

ScalaからApp EngineのDatastoreに書き込みたいんだけど、使いやすい文法はないものか? ここに直接書いてるから、文法は間違ってるかも?雰囲気だけ伝わればよし。

DSL風?

Entity.store("kind") {
p("name", "Taro"),
p("age", 10)
}

DSL風は嫌いではないけど、プロパティ名を毎回指定するのはどうなんだろ?と思う。KVSってそういうものだけど、もうちょっと楽したいよね?って意味で。

Java風?

class Entity {
val name:Option[Property[String]] = "name".p
val age = "age".p // 型推論でOption[Property[Int]]
val birthday = "date".p.index
}
val e = new Entity()
e.name = "Taro"
e.age = 10 // def age_=(value) = valueとかしておく必要ありか
e.birthday = Date(2001, 7, 15)
Datastore.put(e)

なんとなく、これにはしたくない。せっかくのScalaなんだし…という、感情的理由(^^;

trait利用

trait Person {
// val kind:String = "person" // ここに持たせる?
val name:Option[Property[String]]
val age:Option[Property[Int]]
}

val e = new Entity with Person
e.name = "Taro" // Property[String].valueに"Taro"を設定する or varにする
e.age = 10
Datastore.store("kind", e)

定義(trait)と実装(with)で分かれてるし、これはこれでありかも?と思ってる。 with使ったときのオーバーヘッドってどうなるんだろ?ってことを調べてない。

最近はこんなことも考えてる。