ScalaからDatastoreを更新したい

Ken published on
2 min, 349 words

Categories: Programming

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使ったときのオーバーヘッドってどうなるんだろ?ってことを調べてない。

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