在我的 Web 应用程序中,授权用户至少有 4 个“方面”:http 会话相关数据、持久数据、facebook 数据、运行时业务数据。
我决定使用案例类组合而不是特征至少有两个原因:
- 特征混合可能导致名称冲突
- 我想要免费的案例类好东西,比如模式匹配和复制方法
我想知道有经验的 scalaists 对此主题的看法。看起来特征和/或蛋糕模式应该适合此类任务,但正如我上面提到的那样存在问题......很明显,我不仅想快速轻松地实现它,而且还想深入理解它以供使用在未来。
那么我的决定是否有任何缺陷和误解,或者是否正确?相关代码如下所示:
case class FacebookUserInfo(name: String, friends: List[Long])
case class HttpUserInfo(sessionId: String, lastInteractionTime: Long, reconnect: Boolean)
case class RuntimeQuizUserInfo(recentScore: Int)
trait UserState {
def db: User
def http: HttpUserInfo
}
case class ConnectingUser(db: User, http: HttpUserInfo) extends UserState
case class DisconnectedUser(db: User, http: HttpUserInfo, facebook: Option[FacebookUserInfo]) extends UserState
case class AuthorizedUser(db: User, http: HttpUserInfo, facebook: FacebookUserInfo,
quiz: RuntimeQuizUserInfo) extends UserState