【发布时间】:2017-04-13 09:07:10
【问题描述】:
我有三个不同的 Scala 项目,其中一个只包含用于其他两个 Scala 项目(以下称为库)的模型。这三个项目之一是 Play Web 应用程序,我想将模型库中的模型保存在 MongoDB 中(代码位于 Play 应用程序中)。
所以在我的库中,我有以下模型:
case class MyUser(id: UUID = UUID.randomUUID(), timestamp: Instant = Instant.now, name: String)
要在我的 Play 应用中持久化 MyUser 的实例,我通常会使用这个模型:
case class MyUser(var _id: Option[BSONObjectID] = None,
id: UUID,
timestamp: Instant,
name: String,
var created: Option[DateTime] = None,
var updated: Option[DateTime] = None
) extends Temporal
现在我正在寻找一种方法将我的库的MyUser 变形为我的 Play 应用程序中的相应类,所以我想我会做这样的事情:
case class MyUser(var _id: Option[BSONObjectID] = None,
var created: Option[DateTime] = None,
var updated: Option[DateTime] = None
) extends lib.MyUser with Temporal
但是,现在我收到以下错误:
禁止逐个继承。要克服此限制,请使用提取器在非叶节点上进行模式匹配。
我想过做这样的事情:
case class MyUser(var _id: Option[BSONObjectID] = None,
user: lib.MyUser,
var created: Option[DateTime] = None,
var updated: Option[DateTime] = None
) extends Temporal
我怎样才能以正确的方式设计这个?
【问题讨论】:
-
您愿意放弃
lib.MyUser上的case class构造吗? -
好吧,我宁愿保留
case class构造。从设计的角度来看,什么会更好:向MyUser添加一个新字段,该字段包含lib.MyUser并用作包装器或继承?
标签: scala playframework playframework-2.0