2013-10-29 33 views
1

我目前正在嘗試使用Play! Framework 2.2play-slick(主分支)。 在play-slick代碼中,我想重寫驅動程序定義以添加Oracle驅動程序(我正在使用slick-extension)。在剛纔的配置文件中,我剛剛看到了/** Extend this to add driver or change driver mapping */ ...配置play-slick和樣本

我來自遙遠的地方(目前正在閱讀Scala編程),所以有很多東西需要學習。所以我的問題是:

  1. 有人能解釋我如何擴展這個Config對象嗎?這個對象被用在其他類中...蛋糕適配器在這裏有用嗎?
  2. 談到蛋糕模式,我閱讀了play-slick提供的計算機數據庫示例。此示例使用蛋糕模式和import play.api.db.slick.Config.driver.simple._如果我使用Oracle驅動程序,我不能使用此導入,我錯了嗎?我如何使用蛋糕模式來定義隱式會話?

非常感謝。 等待您的意見,我仍然在家裏學習的發揮,華而不實的代碼:)

回答

0
  1. 要擴展配置特點我不認爲是必需的蛋糕圖案。您應該能夠創建您的配置對象是這樣的:

    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,而不是一個函數,使其更容易擴展。這不應該打破,但它會更容易做到這一點。

  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,只要你只有兩個不同的DB(一個用於產品,另一個用於測試),那麼你並不需要蛋糕模式,這是Config的要點。

希望這回答了你對Scala的閱讀程序的問題,祝你好運(愛那本書:)

+0

謝謝你!這是一個完美的答案。前幾天我讀過JonasBonér,但有一些用於蛋糕模式的用例非常有用。我會用這個Config做一些測試。我不能答應你,我不會再有問題了:)在所有情況下,我都很開心學習Scala/Play/play-slick。 – Archange