我正在使用liftweb 2.5-SNAPSHOT和Scala 2.9.1。
在我的电梯应用程序中,我想要同时使用USer类,MegaProtoUser特性用于每个用户的自我管理,CRUDify特性用于管理员的CRUD视图。
当我尝试一个天真的apprach并同时使用两个traint扩展我的模型对象时,我会遇到编译错误,因为这两个特征有几个部分(函数和类型),而不使用覆盖。
相反,我使用以下方法和两个模型对象:
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
}
这种方法似乎有效,但我不确定,如果我遗漏了一些细节。