0

私は次のようにスカラ特性を持っています -

trait Mytrait {
   def saveData : Boolean = {
      //make database calls to store
      true
   }
    def getData : Integer = {
        //get data from database
        return i
    }

}

Cake パターンについて聞いたことがありますが、このようなモッキング特性に Cake パターンを適用する方法がわかりません。

これを行う方法について誰かが指摘できますか?

4

1 に答える 1

0

次のようにします。

trait Mytrait { this: DbConnectionFactory => // Require this trait to be mixed with a DbConnectionFactory
  def saveData : Boolean = {
    val connection = getConnection // Supplied by DbConnectionFactory 'layer'
    //use DB connection to make database calls to store
    true
  }

  def getData : Integer = {
    val connection = getConnection // Supplied by DbConnectionFactory 'layer'
    val i: Integer = ... // use DB connection to get data from database
    return i
  }

}

trait DbConnection

trait DbConnectionFactory {
  def getConnection: DbConnection
}

// --- for prod:

class ProdDbConnection extends DbConnectionFactory {
  // Set up conn to prod Db - say, an Oracle DB instance
  def getConnection: DbConnection = ???
} // or interpose a connection pooling implementation over a set of these, or whatever

val myProdDbWorker = new ProdDbConnection with Mytrait

// --- for test:

class MockDbConnection extends DbConnectionFactory {
  // Set up mock conn
  def getConnection: DbConnection = ???
}

val myTestDbWorker = new MockDbConnection with Mytrait

適切な DbConnectionFactory と特性から「レイヤー」または「ケーキ」を形成する場所。

これは単純な例にすぎません。関連するコンポーネントの数を拡張したり、さまざまな状況で使用したい MyTrait の複数の実装を作成したりできます。たとえば、Scala での依存性注入: Cake パターンの拡張を参照してください。

于 2013-07-30T23:53:01.707 に答える