3

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
}

このアプローチは機能しているように見えますが、詳細が欠けているかどうかはわかりません。

  1. より良いアプローチはありますか?
  2. 私のアプローチには、ここで見逃している意図しない影響がありますか?
  3. 最後に、将来、リフトの新しいバージョンにアップグレードする必要がある場合でも、引き続き動作しますか?
4

0 に答える 0