Scala 2.9.1 で liftweb 2.5-SNAPSHOT を使用しています。
私のリフトアプリケーションでは、各ユーザーの自己管理用の MegaProtoUser トレイトと、管理者の CRUD ビュー用の CRUDify トレイトの両方で USer クラスを使用したいと考えています。
単純なアプローチを試みて、User のモデル オブジェクトを一度に両方のトレイントで拡張すると、コンパイル エラーが発生します。これは、オーバーライドを使用せずに 2 つのトレイトに共通の部分 (関数と型) がいくつかあるためです。
代わりに、2 つのモデル オブジェクトに対して次のアプローチを使用します。
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
}
このアプローチは機能しているように見えますが、詳細が欠けているかどうかはわかりません。
- より良いアプローチはありますか?
- 私のアプローチには、ここで見逃している意図しない影響がありますか?
- 最後に、将来、リフトの新しいバージョンにアップグレードする必要がある場合でも、引き続き動作しますか?