В моем веб-приложении у авторизованного пользователя есть по крайней мере 4 "аспекта": данные, относящиеся к сеансу http, постоянные данные, данные facebook, бизнес-данные времени выполнения.
Я решил использовать композицию класса дел вместочерты по крайней мере по двум причинам:
- смешивание черт может привести к конфликтам имен
- я хочу, чтобы такие классные плюсы, как сопоставление с образцом и метод копирования
Хотелось бы узнать мнение опытных скалистов на эту тему.Похоже, что черты и / или шаблон торта должны подходить для таких задач, но, как я уже упоминал выше, есть проблемы ... Очевидно, что я не только хочу реализовать это быстро и легко, но и глубоко понять его для использованияв будущем.
Так есть ли в моем решении какие-либо недостатки и недоразумения, или это правильно?Связанный код выглядит так:
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