以下のような2つのサービスクラスがあります...
ユーザーサービス:
class UserService { dao: UserGroupDao =>
...
def read(userId: String): Future[Option[User]] = dao.readUser(userId)
...
}
グループサービス:
class GroupService {dao: UserGroupDao =>
def createGroup(group: Group): Future[Either[String, String]]) = {
val userService = new UserService() with UserMysqlDao
userService.read(group.ownerId) map {
case Some(u) => dao.createGroup(group)
case None => Left("Invalid User!")
}
}
...
}
グループの所有者が有効なユーザーであるかどうかを検証しているだけです。そのために、ハードコーディングされた Dao 実装、つまり UserMySqlDao で userService.read メソッドを再利用しました。
ここで私の質問は、ハードコードされた Dao Impl を提供する代わりに、グループサービスの dao オブジェクトをどのように使用できるかということです。UserService と GroupService のタイプが同じであるためです。
私は以下を使用してみました
val userService = new UserService with dao
しかし、これは失敗しました。私はscalaが初めてなので、なぜこれが失敗したのかよくわかりません。これが合法ではない理由を誰かが明らかにしてくれると助かります。
前もって感謝します :)