我目前正在尝试使用Play! Framework 2.2
和play-slick
(主分支)。
在播放光滑的代码中,我想覆盖驱动程序定义以添加Oracle驱动程序(我正在使用slick-extension)。在Play-slick的Config.Scala中,我刚看到/** Extend this to add driver or change driver mapping */
...
我来自遥远的地方(目前正在阅读Scala编程)所以需要学习很多东西。所以我的问题是:
import play.api.db.slick.Config.driver.simple._
如果我使用的是Oracle驱动程序,我无法使用此导入,我错了吗?如何使用蛋糕模式定义隐式会话? 非常感谢。 等待你的建议,我仍然在家里研究播放光滑的代码:)
答案 0 :(得分:0)
要扩展Config trait ,我认为不需要蛋糕模式。您应该能够像这样创建Config对象:
import scala.slick.driver.ExtendedDriver
object MyExtendedConfig extends play.api.db.slick.Config {
override def driverByName: String => Option[ExtendedDriver] = {name: String =>
super.driverByName(name) orElse Map("oracledriverstring" -> OracleDriver).get(name)
}
lazy val app = play.api.Play.current
lazy val driver: ExtendedDriver = driver()(app)
}
为了能够使用它,您只需要执行:import MyExtendedConfig.driver._
而不是import play.slick.db.api.Config.driver._
。顺便说一下,我看到driverByName的类型可能是Map而不是Function,因此更容易扩展。这应该不会破坏,但这样做会更容易。
我认为JonasBonér的旧博客是阅读蛋糕模式的好地方(http://jonasboner.com/2008/10/06/real-world-scala-dependency-injection-di/)。我对它的天真理解是当你有使用self
类型的图层时你有一个蛋糕模式:
trait FooComponent{ driver: ExtendedDriver =>
import driver.simple._
class Foo extends Table[Int]("") {
//...
}
}
光滑/播放模式中的蛋糕模式有2个用例:1)如果您有引用其他表的表(如在计算机数据库示例中)2)要控制使用哪个数据库的确切位置时间或者你使用许多不同的类型。通过使用Config,只要您只有2个不同的DB(一个用于prod,一个用于测试),就不需要蛋糕模式,这就是Config的要点。
希望这能回答你的问题并祝你好好阅读Scala编程(喜欢那本书:)