在Lift的记录框架中创建专业字段

时间:2012-01-06 23:47:57

标签: scala mongodb lift

Scala的一个很好的优点是可以保证类型安全,因此应用程序中不会出现任何未定义的值。然而,Mongo根本不是类型安全的。因此,我认为,对Mongo的一种转换是好的,以确保只保存正确的值(作为字符串)。我的Scala中有这种类型:

sealed trait Tribe

object Tribe {
  def fromString(s:String) = s match {
    case "Earth Pony" => EarthPony
    case "Pegasus" => Pegasus
    case "Unicorn" => Unicorn
    case "Alicorn" => Alicorn
    case _ => throw new NoSuchElementException
  }
}

case object EarthPony extends Tribe {
  override def toString = "Earth Pony"
}

case object Pegasus extends Tribe {
  override def toString = "Pegasus"
}

case object Unicorn extends Tribe {
  override def toString = "Unicorn"
}

case object Alicorn extends Tribe {
  override def toString = "Alicorn"
}

现在我想创建一个TribeField字段,我可以在MongoRecord类中使用它来确保在我读取记录时完成此转换,或保存它。

不幸的是,关于Lift记录的文档似乎很少,到目前为止我还没有找到有关如何执行此操作的任何有用信息。也许有人可以给我一些提示?

1 个答案:

答案 0 :(得分:2)

我很确定lift-record-mongodb使用提升记录Field实例的功能,通过Field.asJValue和Field.setFromJValue对JSON进行序列化/反序列化。要创建一个完全类型安全的Tribe Field,您需要创建自己的TypedField [Tribe]并实现这些方法以及设置和访问您的字段的其他抽象方法。我建议看看StringField或其他一个具体的Field类型,以获取有关如何做到这一点的指示。

更简单的替代方法是扩展StringField本身并添加setTribe / asTribe方法。

如果您需要更多信息,特别是关于Lift的Mongodb集成,我建议您尝试使用Lift Google Group。保持代码的蒂姆·尼尔森通常很快回答问题。