trait DAOContract[T <: Entity] {
// default create
def create(t: T): Option[Int]
}
trait UserContract extends DAOContract[User] {
// provide alternate create method for transactional blocks
def create(u: User)(implicit ss: Session): Either[String, Int]
...
}
// DAO provides create implementation with embedded session
class UserDAO(implicit val db: Connection)
extends DAO[User] with UserContract {
import db.Driver.Implicit._
import org.scalaquery.ql._
...
}
コントローラーで
dao.create(model) // boom, no implicit session
ここで何かが欠けていることを願っています: scala コンパイラが上記の 2 つの create メソッド シグネチャを区別できないのはなぜですか?
基本的に、トランザクション (つまり、どちらかを返す) またはスタンドアロンの操作に対して別のメソッド命名規則を考え出さない限り、DAO 操作をオーバーロードすることは不可能です。
または、私は物事を間違った方法で行っているだけです。完全に可能性があります...