配置播放和样本

时间:2013-10-29 08:09:06

标签: scala slick play-slick

我目前正在尝试使用Play! Framework 2.2play-slick(主分支)。 在播放光滑的代码中,我想覆盖驱动程序定义以添加Oracle驱动程序(我正在使用slick-extension)。在Play-slick的Config.Scala中,我刚看到/** Extend this to add driver or change driver mapping */ ...

我来自遥远的地方(目前正在阅读Scala编程)所以需要学习很多东西。所以我的问题是:

  1. 有人可以解释一下如何扩展此Config对象吗?这个对象在其他类中使用...这里的蛋糕是否有用?
  2. 谈到蛋糕模式,我阅读了play-slick提供的计算机数据库示例。此示例使用了蛋糕模式和import play.api.db.slick.Config.driver.simple._如果我使用的是Oracle驱动程序,我无法使用此导入,我错了吗?如何使用蛋糕模式定义隐式会话?
  3. 非常感谢。 等待你的建议,我仍然在家里研究播放光滑的代码:)

1 个答案:

答案 0 :(得分:0)

  1. 要扩展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,因此更容易扩展。这应该不会破坏,但这样做会更容易。

  2. 我认为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的要点。

  3. 希望这能回答你的问题并祝你好好阅读Scala编程(喜欢那本书:)