我正在使用带有 Scala 2.9.1 的 liftweb 2.5-SNAPSHOT。
在我的电梯应用程序中,我想同时使用一个 USer 类,用于每个用户的自我管理的 MegaProtoUser 特征和用于管理员的 CRUD 视图的 CRUDify 特征。
当我尝试一个简单的方法并同时使用两个训练扩展我的 User 模型对象时,我得到编译错误,因为这两个特征有几个共同的部分(函数和类型)而不使用覆盖。
相反,我对两个模型对象使用以下方法:
import net.liftweb.mapper._
/**
* Entity class for users
*/
class User extends MegaProtoUser[User] {
override def getSingleton = User
}
/**
* Provides the meta model for User together with the self administration features for each user
*/
object User extends User with MetaMegaProtoUser[User] {
override def dbTableName = "users"
}
/**
* Again the meta model for User, but this time without self administration but with the CRUD view for the administrator
*/
object UserAdministration extends User with KeyedMetaMapper[Long, User] with ProtoUser[User] with CRUDify[Long, User] {
override def dbTableName = User.dbTableName
}
这种方法似乎有效,但我不确定是否遗漏了一些细节。
- 有更好的方法吗?
- 我的方法是否有一些我在这里遗漏的无意影响?
- 最后,当我将来应该升级到更新的电梯版本时,它仍然可以工作吗?