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 个创建方法签名?
基本上,如果不为事务性(即返回 Either)或独立的操作提出不同的方法命名约定,我就不可能重载 DAO 操作。
或者,我只是以错误的方式做事,完全有可能......